Ho una matrice di stringhe di dimensioni variabili e sto provando a scorrere in modo programmato l'array e ad associare tutte le righe in una tabella in cui la colonna "Tag" contiene almeno una delle stringhe dell'array. Ecco alcuni pseudo codice:Come aggiungere dinamicamente l'operatore O alla clausola WHERE in LINQ
IQueryable<Songs> allSongMatches = musicDb.Songs; // all rows in the table
posso facilmente interrogare questo filtraggio tavolo su un insieme fisso di stringhe, in questo modo:
allSongMatches=allSongMatches.Where(SongsVar => SongsVar.Tags.Contains("foo1") || SongsVar.Tags.Contains("foo2") || SongsVar.Tags.Contains("foo3"));
Tuttavia, questo non funziona (ottengo il seguente errore: "un'espressione lambda con un corpo dichiarazione non può essere convertito in un albero di espressione")
allSongMatches = allSongMatches.Where(SongsVar =>
{
bool retVal = false;
foreach(string str in strArray)
{
retVal = retVal || SongsVar.Tags.Contains(str);
}
return retVal;
});
qualcuno mi può mostrare la strategia corretta per raggiungere questo obiettivo? Sono ancora nuovo al mondo di LINQ :-)
Grazie Mehrdad, la soluzione è venuto a tempo di record e ha lavorato come un fascino! Non ero a conoscenza della classe PredicateBuilder. Che caratteristica utile! Apprezzo anche il tuo commento sull'uso di una variabile temporanea per tenere le stringhe ... che mi avrebbe fatto impazzire! Victor –
Prego! –
Mi sono confuso circa l'espressione False per creare il var searchPredicate, Questo deve essere falso? o qualcos'altro si adatterebbe? (Parlando di PredicateBuilder.False()) –
Daniel