2017-03-31 35 views
0

我有一個datagridview窗體。 datagridview數據源被設置爲實體框架數據上下文。如何在實體框架支持的datagridview上使用多個查詢?

_dc = New WarehouseEntities1 
_dc.Configuration.ProxyCreationEnabled = False 
_dc.USER_MANAGEMENT_INFO.Load() 
dgvSUMA.DataSource = _dc.USER_MANAGEMENT_INFO.Local.ToBindingList() 

這工作正常。我有一些搜索框可以過濾數據,這些工作也很好。

If txtUserNameSrch.Text <> "" Then 
    Dim pOC = _dc.USER_MANAGEMENT_INFO.Local.Where(Function(c) c.USER_NAME.Contains(pQrytxt)).ToList() 
    dgvSUMA.DataSource = pOC 
End If 

If Not chkbxIncludeDropped.Checked Then 
    Dim pOC = _dc.USER_MANAGEMENT_INFO.Local.Where(Function(c) c.USER_STATUS.Contains("ACTIVE")).ToList() 
    dgvSUMA.DataSource = pOC 

End If 

再次這工作正常,除了一次只應用一個過濾器。我想結合Where查詢,如果他們都設置,並且到目前爲止我失敗。我不想將它們結合在if語句中,因爲我有15個不同的搜索控件。相反,我想將過濾器應用於前一個過濾器的結果,然後在最後設置datagridview數據源。

post類似於我想做的事,但在C#中

回答

1

如果你是在執行查詢前場,然後過濾結果OK,你可以做到這一點。將pOC的聲明移出If,因此可以在每個地方對其進行過濾。

Dim pOC = _dc.USER_MANAGEMENT_INFO.Local.ToList() ' database is queried 

If txtUserNameSrch.Text <> "" Then 
    pOC = pOC.Where(Function(c) c.USER_NAME.Contains(pQrytxt)).ToList() ' filtered 
End If 

If Not chkbxIncludeDropped.Checked Then 
    pOC = pOC.Where(Function(c) c.USER_STATUS.Contains("ACTIVE")).ToList() ' filtered 
End If 

dgvSUMA.DataSource = pOC 
+0

如果您具有對UI控件的這種級別的訪問權限,那麼您在UI線程上執行的查詢沒有明顯的異步性。你應該考慮在不同的線程上執行你的查詢。 – djv