2017-03-31 2 views
0

Ich habe ein Formular mit einem Datagridview. Die Datagridview-Datenquelle ist auf einen Entity Framework-Datenkontext festgelegt.Wie verwenden Sie mehrere Abfragen in Entity Framework-gesichertem Datagridview?

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

Das funktioniert gut. Ich habe eine Reihe von Suchfeldern, die die Daten filtern, und diese funktionieren auch gut.

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 

Auch dies funktioniert gut, außer dass jeweils nur ein Filter angewendet wird. Ich möchte die Where Abfragen kombinieren, wenn sie beide gesetzt sind und bis jetzt scheitere ich. Ich möchte sie nicht in if-Anweisungen kombinieren, da ich 15 verschiedene Suchsteuerelemente habe. Stattdessen möchte ich die Filter auf die Ergebnisse des vorherigen Filters anwenden und dann am Ende die Datagridview-Datenquelle festlegen.

Diese post ist ähnlich zu dem, was ich tun möchte, aber in C#

Antwort

1

Wenn Sie die Abfrage mit der Ausführung vorne in Ordnung sind, dann die Ergebnisse filtern, können Sie dies tun. Verschieben Sie die Deklaration von pOC aus jedem If, so dass es an jedem Ort gefiltert werden kann.

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

Wenn Sie über diese Ebene des Zugriffs auf UI-Steuerelemente verfügen, führen Sie Ihre Abfrage auf dem UI-Thread aus, die keine offensichtliche Asynchronität aufweist. Sie sollten Ihre Abfrage in einem anderen Thread ausführen. – djv

Verwandte Themen