2016-07-19 4 views
3

Hoffe ich stelle diese Frage in der richtigen Weise.Winform Checkbox zu linq Abfrage verwenden

Ich versuche zu bestimmen, die effizienteste Möglichkeit, Kontrollkästchen zu verwenden, um zu ändern, was von meiner Linq-Abfrage zurückgegeben wird, ohne für jede mögliche Kombination zu codieren.

Als Beispiel habe ich drei Kontrollkästchen auf meiner Winform, die drei Spalten dar, die ich

[] Jahr

[] Make

[] Modell

abfragen versuchen Ich verwende eine Linq-Anweisung, um die verschiedenen Kombinationen von Baujahr und Modell durch EF

var uniquecombos = cb.MakeModelYear.Where(i => i.Year != null && i.Make != null && i.Model != null).Distinct().ToList(); 
zu bestimmen 10

Was ich tun möchte, ist die Verwendung der Kontrollkästchen in meinem WinForm, um zu bestimmen, welche Felder ich in meine Abfrage einbeziehe.

So

[x] Jahr

[x] Make

[] Modell

var uniquecombos = cb.MakeModelYear.Where(i => i.Year != null && i.Make != null).Distinct().ToList(); 

ergeben würde Gibt es eine gute Möglichkeit, die Eingaben zu ändern der Abfrage, ohne jede Kombination von Checkboxen bis if stat berücksichtigen zu müssen Elemente?

Vielen Dank im Voraus!

Antwort

1

Da Sie separate Eigenschaften haben Sie immer noch jeder hceck ned - aber man kann zugleich für jede Checkbox Kombination Konto:

.Where(i => (
      (!cbxYear.Checked || i.Year != null) && 
      (!cbxMake.Checked || i.Make != null) && 
      (!cbxModel.Checked || i.Model != null) 
      ) 
+0

Tolle Lösung! Vielen Dank! – markdozer

1

Sie können etwas tun:

var query = cb.MakeModelYear; 

if (chkYear.Checked) 
    query = query.Where(i => i.Year != null); 

if (chkMake.Checked) 
    query = query.Where(i => i.Make != null); 

if (chkModel.Checked) 
    query = query.Where(i => i.Model != null); 

var uniquecombos = query.Distinct().ToList();