2012-02-01 11 views
9

Ho una lista che ha 4 righe. Ho bisogno di ottenere il valore della terza riga.Salta Linq, prendi

var result = (from rs in list 
        select rs).Skip(2).First(); 

C'è un motivo per cui dovrei usare un Take (1) in questo scenerio come ho visto utilizzato.

 var result = (from rs in list 
        select rs).Skip(2).Take(1); 
+11

Non c'è mai stato alcun modo per scrivere 'da x in y selezionare x'. – SLaks

+2

utilizza direttamente list.Skip (2) .Take (1) –

+4

'list.ElementAt (2)' è tutto ciò che serve, se si conosce l'indice dell'articolo che si sta cercando. – Naikrovek

risposta

18

Take(1) restituisce un IEnumerable<T> contenente un oggetto.
First() restituisce direttamente l'oggetto.

+12

Questo è in realtà sbagliato - 'Take (1)' può restituire un enumerabile contenente oggetti zero se l'enumerazione di origine è vuota. – BrokenGlass

0

A meno che non si desidera ottenere Articoli multipli saltare le prime due voci

//Example: 
var result = (from rs in list 
         select rs).Skip(2).Take(5); //Returns 5 items 
5

Nel contesto della questione Take(1) restituisce un IEnumerable<T>che conterrà zero o un elemento - quindi è simile a FirstOrDefault() (oltre restituendo un censimento).

Quindi per rispondere alla domanda: no. Utilizzare First() o FirstOrDefault() in questo caso in base alle aspettative di ciò che è nel set di risultati.