2011-08-19 11 views
5

Ho queste due linee, che fanno esattamente la stessa cosa. Ma sono scritti diversamente. Qual è la pratica migliore e perché?Qual è il metodo migliore per utilizzare LINQ?

firstRecordDate = (DateTime)(from g in context.Datas 
            select g.Time).Min(); 

firstRecordDate = (DateTime)context.Datas.Min(x => x.Time); 
+2

Sospetto che si tratti di una preferenza personale. Personalmente trovo la seconda più chiara e semplice, ma sono sicuro che gli altri pensano il contrario. Sono sicuro che qualcuno sarà in grado di confermare se compilano o meno la stessa cosa. :) – Chris

risposta

6

non esiste alcuna differenza semantica tra la sintassi del metodo e la sintassi della query . Inoltre, alcune query, come quelle che recuperano il numero di elementi che corrispondono a una condizione specificata oppure che recuperano l'elemento che ha il valore massimo in una sequenza sorgente, possono essere espressi solo chiamate di metodo.

http://msdn.microsoft.com/en-us/library/bb397947.aspx

Vedi anche qui: .NET LINQ query syntax vs method chain

Si tratta di ciò che hai dimestichezza con e quello che si trova è più leggibile.

+0

+1 poco letto interessante. –

1

Il secondo utilizza le espressioni lambda. Mi piace perché è compatto e più facile da leggere (anche se alcuni troveranno il primo più facile da leggere).

Inoltre, il primo è più adatto se si dispone di uno sfondo SQL.

1

direi andare con ciò che è più leggibile o comprensibile per quanto riguarda il team di sviluppo. Torna tra un anno o giù di lì e vedi se riesci a ricordare LINQ ... beh, questo LINQ particolare è ovviamente semplice, quindi è discutibile :-)

Le migliori pratiche sono anche abbastanza supponenti, non hai intenzione di ottenere una risposta qui. In questo caso, sceglierei il secondo elemento perché è conciso e posso leggerlo e comprenderlo più velocemente del primo, anche se solo leggermente più veloce.

1

Personalmente preferisco di gran lunga utilizzare le espressioni lambda. Per quanto ne so, non c'è una vera differenza, come dici tu puoi fare esattamente la stessa cosa in entrambi i modi. Abbiamo deciso di utilizzare tutti i lambda in quanto è facile da leggere, seguire e raccogliere per le persone a cui non piace SQL.

1

Non c'è assolutamente nessuna differenza in termini di risultati, a patto che in realtà scrivere dichiarazioni equivalenti in ogni formato.

Vai per il più leggibile per qualsiasi query. Le query complesse con join e molte clausole where etc sono spesso più facili da scrivere/leggere nella sintassi di query di linq, ma quelle molto semplici come context.Employees.SingleOrDefault(e => e.Id == empId) sono più semplici utilizzando la sintassi concatenamento di metodi. Non esiste una regola generale "uno è meglio" e due persone possono avere una differenza di opinione per ogni esempio dato.

1

Non c'è alcuna differenza semantica tra le due affermazioni. La scelta è puramente di preferenza di stile

1

Avete bisogno del cast esplicito in uno di essi? Time non è già un DateTime?

Personalmente preferisco il secondo approccio perché trovo la sintassi del metodo di estensione più familiare della sintassi LINQ, ma in realtà è solo una preferenza personale, hanno lo stesso rendimento.

La seconda scritta a guardare più esattamente come il primo sarebbe context.Datas.Select(x => x.Time).Min().Quindi puoi vedere come lo hai scritto con Min(x => x.Time) potrebbe essere leggermente più efficiente, perché hai solo operatività invece di due

1

La sintassi di comprensione delle query è in realtà compilata in una serie di chiamate ai metodi di estensione, il che significa che le due sintassi sono semanticamente identiche. Qualunque sia lo stile che preferisci è quello che dovresti usare.

Problemi correlati