Ho un modulo con più campi su di esso (nome dell'azienda, codice postale, ecc.) Che consente a un utente di cercare società in un database. Se l'utente inserisce valori in più di un campo, devo cercare su tutti questi campi. Sto usando LINQ per interrogare il database.Come si combinano le espressioni LINQ in una?
Finora sono riuscito a scrivere una funzione che esaminerà il loro input e lo trasformerà in una lista di espressioni. Ora voglio trasformare quell'elenco in una singola espressione che posso poi eseguire tramite il provider LINQ.
Il mio primo tentativo è stata la seguente
private Expression<Func<Company, bool>> Combine(IList<Expression<Func<Company, bool>>> expressions)
{
if (expressions.Count == 0)
{
return null;
}
if (expressions.Count == 1)
{
return expressions[0];
}
Expression<Func<Company, bool>> combined = expressions[0];
expressions.Skip(1).ToList().ForEach(expr => combined = Expression.And(combined, expr));
return combined;
}
Tuttavia, questo non riesce con un messaggio di eccezione sulla falsariga di "L'operatore binario e non è definita per ...". Qualcuno ha qualche idea su cosa devo fare per combinare queste espressioni?
MODIFICA: è stata corretta la riga in cui mi ero dimenticato di assegnare il risultato di un insieme di espressioni a una variabile. Grazie per avermelo fatto notare.
@Jon Skeet: 'combined' verrà digitato come' Expression'; è necessario fare un po 'di lavoro per restituirlo come un' espressione> '. –
jason
Sono d'accordo che il tuo primo codice sia più facile da capire, quindi farò di questo la risposta corretta. Comunque, in realtà userò il secondo frammento perché è esattamente ciò di cui ho bisogno - stavo rendendo le cose troppo complesse, grazie Jon. – gilles27
Ironicamente stavo modificando mentre entrambi questi commenti sono stati scritti - ma siccome era questo secondo frammento che è stato usato, penso che lascerò così com'è :) –