Hallo,
für eine Suche möchte ich ein Select auf eine Liste von Objekten ausführen.
Maximal sollen 3 Properties der Objekte nach einem String durchsucht werden.
Der User kann allerdings per Checkbox auswählen ob alle drei Properties (z.B. Name, Vorname, Geburtsname) oder weniger durchsucht werden sollen.
Bei 3 Properties mit je 2 Zuständen (durchsuchen/nicht durchsuchen) ergibt das 2^3 verschiedene Kritierenkombinationen.
Anstatt nun per LINQ 8 verschiedene Abfragen zu definieren, würde ich lieber eine Query haben, die abhängig von den Checkboxen den Where-Teil erweitert.
Mit Datasets ging das super angenehm - man hat einen string definiert, der das Filter-Statement enthält.
Dann konnte man weitere Statements mit dem String verodern und am Ende die Abfrage ausführen.
Bei LINQ scheint das sehr schwer - hat da jemand eine praktikable Lösung?
Danke!
Gruß,
Daniel
Hallo mydani,
sieh dir mal hier den 3. Code-Teil der 1. Antwort an: LINQ to SQL Where Clause Optional Criteria.
Dort wird, wenn eine bestimmte Bedingung erfüllt ist, die LINQ-Abfrage weiter eingeschränkt.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo,
Ver-UND-en geht so sehr einfach:
var blubb = new List<...>();
blubb = blubb.Where(x => x.property > 5);
blubb = blubb.Where(x => x.property <10);
Wie im ersten Post geschrieben geht es aber um bedingte Veroderung weiterer Kriterien.
Gruß,
Daniel
Hallo mydani,
es ist doch in folgendem Code-Beispiel gezeigt, wie es funktioniert, oder?
And then based on a condition, add additional where constraints.
if(condition) query = query.Where(i => i.PONumber == "ABC");
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo m0rius,
wenn du nun mehrere dieser Statements hintereinander hast, dann gelten die alle als einschränkende Kriterien (UND-Operator).
Ich habe aber eine Möglichkeit gesucht (und inzwischen auch gefunden, über einen Lambda-Ausdruck) um Kriterien hinzuzufügen, die das Ergebnisfeld der Umfrage erweitern (ODER-Operator).
Gruß,
Daniel
Hallo mydani,
tut mir Leid, dann habe ich dich falsch verstanden.
Sei doch bitte trotdzem so nett und poste deine Lösung für die Nachwelt hier.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Oder ohne LINQKit gehts auch mit folgendem Code:
.Where(x => {
var result = false;
if (condition1 && x.property != somevalue)
result = true;
if (condition2 && x.property2 != somevalue2)
result = true;
...
return result;
})