Quando formatti una query Linq complessa abbastanza bene (non lasciarla girare su troppe righe) non dovrebbe essere più difficile da leggere di una condizione complessa in un'istruzione while
loop o if
.
Il follow mi sta benissimo:
var myList = MyThings.Where(o => o.ID == someID
&& o.Name == someName
&& IsAdd
|| /* other conditions */).ToList();
Così fa la versione che utilizza un% estrattoequals
Func<T, bool>
.
Tuttavia , di solito quando vedo un oggetto Func
come quello, suppongo che potrebbe non essere sempre la stessa logica. Io uso un Func
quando l'azione che si sta eseguendo deve essere passata esternamente o determinata da qualche condizione. In questo caso, il tuo Func
si trova proprio accanto all'espressione Linq stessa, quindi è facile vedere che non è il caso, ma potrebbe confondere se fossero ulteriormente separati.
Supponiamo che questa logica sia stata utilizzata in una condizione if
. Se la logica è abbastanza complessa da prendere in considerazione la possibilità di suddividerla nella propria variabile booleana, è probabilmente giustificato fare qualcosa di simile e creare una Func
. Se dovessi scrivere la condizione direttamente nel corpo di if
, è probabilmente abbastanza semplice da capire all'interno del corpo della tua funzione Where
.