Quando utilizzare le espressioni lambda anziché una clausola Where in LINQ
-
20-08-2019 - |
Domanda
Sto davvero scavando in LINQ e sto cercando di sbrigare questo business di espressione lambda. Non vedo il vantaggio di alcune sfumature della sintassi. In primo luogo, mi sembra che un'espressione lambda sia principalmente solo un modo diverso di usare una clausola Where. Perché allora non dovrei usare solo una clausola Where? L'espressione lambda è più efficiente?
È solo un'altra aggiunta sintattica per attirare programmatori di un altro gruppo per sentirsi più a proprio agio in C #? Esistono altri casi d'uso migliori per le espressioni lambda a cui non ho ancora esposto?
Soluzione
Dai un'occhiata a questo articolo: Sintassi delle query LINQ contro la sintassi del metodo :
In generale, si consiglia la sintassi della query perché di solito è più semplice e di più leggibile; tuttavia non c'è semantico differenza tra la sintassi del metodo e sintassi della query. Inoltre, alcuni query, come quelle che recuperano il numero di elementi che corrispondono a condizione specificata o che recupera l'elemento che ha il valore massimo in una sequenza sorgente, può essere solo espresso come chiamate di metodo. Il documentazione di riferimento per il operatori di query standard in Lo spazio dei nomi System.Linq generalmente utilizza sintassi del metodo. Pertanto, anche quando iniziare a scrivere query LINQ, è utile conoscere come utilizzare la sintassi del metodo nelle query e in stesse espressioni di query.
E anche questa domanda: LINQ: Dot Notation vs Query Expression
Altri suggerimenti
Leggi questo . Le query LINQ verranno trasformate in espressioni Lambda dal compilatore in fase di esecuzione.
Internamente, il compilatore tradurrà la sintassi della query nella sintassi lambda più esplicita. Non vi è alcun guadagno inerente alle prestazioni per entrambi gli stili e il codice generato per la maggior parte degli scenari è quasi identico a ciò che le persone scrivono a mano.
La differenza principale è che con la sintassi lambda è possibile eseguire il concatenamento in qualsiasi metodo di estensione operando, restituendo e IEnumerable<T>
. Con la sintassi della query, sei limitato ai particolari metodi di estensione esplicitamente supportati dalla lingua (varia da una lingua all'altra)
L'utilizzo o meno della sintassi della query è davvero una questione di preferenze personali.