【问题标题】:How to use multiple queries on Entity Framework backed datagridview?如何在实体框架支持的 datagridview 上使用多个查询?
【发布时间】:2017-03-31 20:41:19
【问题描述】:

我有一个带有 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#中

【问题讨论】:

    标签: vb.net winforms entity-framework datagridview


    【解决方案1】:

    如果您可以预先执行查询,然后过滤结果,则可以执行此操作。将 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
    

    【讨论】:

    • 如果您对 UI 控件具有此级别的访问权限,那么您将在没有明显异步性的 UI 线程上执行查询。您应该考虑在不同的线程上执行您的查询。
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多