2012-02-01 3 views
9

У меня есть список, который имеет 4 строки. Мне нужно получить значение 3-й строки.Linq skip, take

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

Есть ли причина, почему я хотел бы использовать Take (1) в этом scenerio как я видел использовал.

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

В письменной форме никогда не бывает буквы 'from x in y select x'. – SLaks

+2

используйте непосредственно list.Skip (2) .Take (1) –

+4

'list.ElementAt (2)' все, что вам нужно, если вам известен индекс элемента, который вы ищете. – Naikrovek

ответ

18

Take(1) возвращает IEnumerable<T>, содержащий один объект.
First() возвращает объект напрямую.

+12

Это на самом деле не так - 'Take (1)' может возвращать перечисляемый, содержащий нулевые объекты, если нумерация источника пуста. – BrokenGlass

0

Нет, если вы хотите получить несколько пунктов пропуска первых двух пунктов

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

В контексте вопроса Take(1) возвращается к IEnumerable<T>, который будет содержать ноль или один элемент - так он похож на FirstOrDefault() (помимо возвращения перечисления).

Так что ответьте на вопрос: нет. Используйте либо First(), либо FirstOrDefault() в этом случае в зависимости от вашего ожидания того, что находится в наборе результатов.