Entwickler-Ecke

Basistechnologien - LINQ Query - Select auf List<...> mit optionalen Conditions


mydani - Fr 19.02.10 23:05
Titel: LINQ Query - Select auf List<...> mit optionalen Conditions
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


Moderiert von user profile iconKha: Topic aus Datenbanken (inkl. ADO.NET) verschoben am Fr 19.02.2010 um 23:20


Kha - Sa 20.02.10 00:20


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
.Where(x => {
  var result = true;
  if (MatchSurname.Checked && x.Surname != SurnameBox.Text)
    result = false;
  ...
  return result;
})

:?:


mydani - Sa 20.02.10 01:02

Genial, das ist es. Ich habs davor mit LINQKit und PredicateBuilder versucht, was so lange gut ging wie die Properties nicht null waren.
In deiner Lösung kann ich aber genau das auch noch abfangen und der Code ist verständlich. Super. Danke!