Есть ли синтаксис LINQ для перегрузок (T, int) команд Where и Select?

Запрос

var q = from elem in collection
        where someCondition(elem)
        select elem;

переводится на

var q = collection.Where(elem => someCondition(elem));

Есть ли синтаксис LINQ, который можно было бы преобразовать в следующее?

var q = collection.Where((elem, index) => someCondition(elem, index));

person Timwi    schedule 21.09.2010    source источник
comment
Является ли index членом вашего класса «elem» или целым числом?   -  person vc 74    schedule 21.09.2010
comment
@vc 74: Несколько способов ответить на ваш вопрос ... ① Наведите курсор на слово Where и нажмите F12. ② Посмотрите на название этого вопроса.   -  person Timwi    schedule 21.09.2010
comment
@Timwi, то, что вы называете синтаксисом LINQ, на самом деле называется синтаксисом понимания запроса   -  person Thomas Levesque    schedule 21.09.2010
comment
@ Томас: Кто? Лучшие результаты поиска Google по этому поводу ничего не дают о microsoft.com, msdn.com или о чем-либо, связанном с дизайном языка C #. Спецификация языка C # называет их выражениями запросов.   -  person Timwi    schedule 21.09.2010
comment
Эрик Липперт И среди прочего ... Я думаю, Эрик - довольно хороший авторитет в этом вопросе;)   -  person Thomas Levesque    schedule 21.09.2010
comment
@Thomas: Я уважаю Эрика Липперта, но считаю, что спецификация языка C # более авторитетна. Вы заметите, что он использовал кавычки, вероятно, потому, что знал, что это не «настоящий» термин. Кроме того, можете ли вы найти более одной записи в блоге?   -  person Timwi    schedule 21.09.2010
comment
Не намного авторитетнее, учитывая, что реальный компилятор не всегда соответствует спецификации;). В любом случае, хотя это может быть не официальный термин для этого, он определенно не называется синтаксисом LINQ ... так что мы оба ошибаемся, я думаю;)   -  person Thomas Levesque    schedule 21.09.2010
comment
Я обычно видел это и называю это выражением запроса или лямбда-выражением. Это все LINQ.   -  person Anthony Pegram    schedule 21.09.2010


Ответы (1)


Нет, для этого нет синтаксиса LINQ.

Простым обходным решением может быть:

var q = from elem in collection.Select((x,i) => new {x,i})
        where someCondition(elem.x,elem.i)
        select elem.x;
person digEmAll    schedule 21.09.2010