2010-01-21 14 views

risposta

33

E 'davvero identico a mappare da linguaggi funzionali. Il motivo per cui è denominato Select è che è stato progettato per essere utilizzato come parte di LINQ che utilizza parole chiave simili a SQL.

from item in collection 
where item.Value == someValue 
select item.Name 

viene tradotta a:

collection.Where(item => item.Value == someValue) 
      .Select(item => item.Name) 

che sarebbe stato un po 'incoerente se Select si chiamava Map; qualcosa come:

collection.Filter(item => item.Value == someValue) 
      .Map(item => item.Name) 

In effetti, molte persone usano LINQ senza aver mai sentito parlare di programmazione funzionale. Per loro, LINQ è un metodo per recuperare oggetti di dati e interrogarli facilmente (come le query SQL). Per loro, Select e Where hanno perfettamente senso. Molto più di Map e Filter.

+2

Ha senso. Se mi interessa davvero tanto potrei racchiudere 'Where' e' Select' nei metodi di estensione. – ChaosPandion

+0

Buona risposta. In realtà ho usato "Seleziona" senza LINQ, ma è molto più chiaro come espressione LINQ. – willem

+0

Grazie, ottima risposta. Fuori dal contesto non ha alcun senso, ma questo aiuta a spiegarlo. – nsantorello

0

Uno dei motivi principali per cui Select arriva è rendere Intellisense funzionante. Inserendo prima la sorgente della sequenza (dall'istruzione), Intellisense può funzionare correttamente.

+5

come è correlato alla domanda? – nawfal

3

All'inizio Select sembrava poco confuso anche per me, ma era solo una questione di tempo. Mehrdad ti dice una buona ragione per Select. A parte questo, mi sembra che Select trasmetta molto meglio l'aspetto di immutabilità di Linq. Non che Map significhi che sta mutando la struttura originale, ma lo Select lo afferma molto più chiaro. Ti dice che non stai toccando la lista originale, ma semplicemente selezionando da essa per formare un altro elenco.

Si accompagna ad altri nomi come Where. Quando chiami collection.Filter ti dà l'idea che stai filtrando su quella particolare raccolta, o almeno la prima volta. Alla fine si tratta solo di familiarizzare. Anche se all'inizio ero così infastidito dai nomi Linq, ora sento che il team MS ha ottenuto il risultato più corretto.

+0

+1 per "Seleziona" lo dice molto più chiaro ". Si deve pensare al di fuori della sintassi SQL. – nrodic

Problemi correlati