Mam tablicę o zmiennej wielkości łańcuchów i próbuję programowo przechodzić przez tablicę i dopasowywać wszystkie wiersze w tabeli, w której kolumna "Tagi" zawiera co najmniej jeden z ciągów w tablicy. Oto niektóre pseudo kod:Jak dynamicznie dodawać operator OR do klauzuli WHERE w LINQ
IQueryable<Songs> allSongMatches = musicDb.Songs; // all rows in the table
mogę łatwo kwerendy to filtrowanie tabeli na stałym zestawem strun, tak:
allSongMatches=allSongMatches.Where(SongsVar => SongsVar.Tags.Contains("foo1") || SongsVar.Tags.Contains("foo2") || SongsVar.Tags.Contains("foo3"));
Jednak to nie działa (pojawia się następujący błąd: „wyrażenie lambda z ciałem oświadczenie nie mogą być konwertowane do drzewa wyrażenie”)
allSongMatches = allSongMatches.Where(SongsVar =>
{
bool retVal = false;
foreach(string str in strArray)
{
retVal = retVal || SongsVar.Tags.Contains(str);
}
return retVal;
});
Czy ktoś może mi pokazać właściwą strategię, aby osiągnąć ten cel? Nadal jestem nowy w świecie LINQ :-)
Thanks Mehrdad, rozwiązanie przyszło w rekordowym czasie i pracował jak urok! Nie wiedziałem o klasie PredicateBuilder. Co za przydatna funkcja! Doceniam również twój komentarz na temat użycia zmiennej tymczasowej do przytrzymywania strun ... która doprowadziłaby mnie do szału! Victor –
Nie ma za co! –
Mam Confused o fałszywym wyrażenie, aby utworzyć var searchPredicate, To musi być fałszywe? czy cokolwiek innego by pasowało? (Mówiąc o PredicateBuilder.False()) –
Daniel