LINQ-Abfrage mit mehreren WHERES einschränken

05/07/2008 - 12:06 von Christian Maaß | Report spam
Hallo zusammen,

habe ein kleines LINQ Problem. Ich versuche Artikel aus einer Tabelle
auszufiltern, dazu nutze ich folgende Abfrage:

var gefundeneArtikel = from a in db.Artikels
select a;

string[] suchwoerter = tbSuchfeld.Text.Split(' ');
foreach (string wort in suchwoerter)
{
gefundeneArtikel = gefundeneArtikel.Where(a =>
a.Beschreibung_Lang.Contains(wort));
}

Nach meiner Logik müsste in der Schleife doch jedesmal die Suche weiter
einschrànkt werden, oder? Suche ich aber jetzt z.B. nach "HP Compaq" werden
mir alle Ergebnisse angezeigt die 'HP' ODER 'Compaq' beinhalten. Wo ist da
mein Denkfehler? Wie könnte ich sowas sonst lösen?

Vielen dank schonmal für eure Hilfe.
Lieben Gruß
Christian
 

Lesen sie die antworten

#1 Frank Dzaebel
05/07/2008 - 15:11 | Warnen spam
Hallo Christian,

habe ein kleines LINQ Problem. Ich versuche Artikel aus einer Tabelle
auszufiltern, dazu nutze ich folgende Abfrage: [...]
Nach meiner Logik müsste in der Schleife doch jedesmal die Suche weiter
einschrànkt werden, oder?



Das liegt an der "Deferred Execution":

[Query Execution]
http://msdn.microsoft.com/en-us/vcs...36751.aspx

Folgendermassen würde es funktionieren, denn
durch "ToList()" erzwingst Du zum Beispiel die Ausführung:

var gefundeneArtikel = (from a in db.Artikels select a).ToList();
foreach (string wort in suchwoerter)
gefundeneArtikel = (gefundeneArtikel.Where(a =>
(a.Beschreibung_Lang ?? "").Contains(wort))).ToList();


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen