2017-03-31 41 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