Laden...

LINQ Query - Select auf List<...> mit optionalen Where-Clauses

Erstellt von mydani vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.830 Views
M
mydani Themenstarter:in
24 Beiträge seit 2009
vor 14 Jahren
LINQ Query - Select auf List<...> mit optionalen Where-Clauses

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

1.002 Beiträge seit 2007
vor 14 Jahren

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

M
mydani Themenstarter:in
24 Beiträge seit 2009
vor 14 Jahren

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

1.002 Beiträge seit 2007
vor 14 Jahren

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

M
mydani Themenstarter:in
24 Beiträge seit 2009
vor 14 Jahren

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

1.002 Beiträge seit 2007
vor 14 Jahren

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

C
52 Beiträge seit 2010
vor 14 Jahren

PredicateBuilder, zu finden im LINQKit.

2.891 Beiträge seit 2004
vor 14 Jahren


>
, zu finden im LINQKit.

Und auch sonst ist das LinqKit (speziell das Expandable) für dynamische LINQ-Queries sehr zu empfehlen.

Gruß,
dN!3L

M
mydani Themenstarter:in
24 Beiträge seit 2009
vor 14 Jahren

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;
})