2012-02-01 7 views
9

Tengo una lista que tiene 4 filas. Necesito obtener el valor de la 3ra fila.omisión de Linq, toma

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

¿Hay una razón por la que me gustaría utilizar un Take (1) en este scenerio como he visto utilizado.

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

Nunca tiene sentido escribir 'de x en y seleccionar x'. – SLaks

+2

use directamente list.Skip (2) .Take (1) –

+4

'list.ElementAt (2)' es todo lo que necesita, si conoce el índice del artículo que está buscando. – Naikrovek

Respuesta

18

Take(1) devuelve un IEnumerable<T> que contiene un objeto.
First() devuelve el objeto directamente.

+12

Esto está realmente mal - 'Take (1)' puede devolver un enumerable que contenga cero objetos si la enumeración de origen está vacía. – BrokenGlass

0

No a menos que desee obtener artículos múltiples saltarse los dos primeros artículos

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

En el contexto de la pregunta Take(1) devuelve un IEnumerable<T>que contendrá cero o un elemento - por lo que es similar a FirstOrDefault() (además de devolver una enumeración).

Así que para responder a su pregunta: no. Use First() o FirstOrDefault() en este caso, dependiendo de lo que espere de lo que está en el conjunto de resultados.

Cuestiones relacionadas