Поведение FirstOrDefault непосредственно в операторе LINQ - PullRequest
17 голосов
/ 08 октября 2009

Похоже, я, возможно, пропустил что-то простое в синтаксисе, но я хотел бы получить результаты FirstOrDefault из оператора linq напрямую, без необходимости сначала сохранять IEnumerable во временной переменной. Примерно так:

var bestCar = from c in cars
              orderby c.Price
              select first c

Я знаю, что ключевое слово first на самом деле не существует, но иллюстрирует, что я хотел бы сделать. Я также знаю, что могу заключить оператор from ... select в круглые скобки и напрямую вызвать FirstOrDefault , но я думаю, что приведенный выше синтаксис чище и проще для чтения.

Ответы [ 5 ]

28 голосов
/ 08 октября 2009

Enumerable.FirstOrDefault является одним из методов расширения в классе Enumerable, который не имеет соответствующего синтаксического элемента LINQ. Единственный способ привязки к этому методу - синтаксис вызова метода.

Вы можете избежать временного, следуя инструкциям

var bestCar = (from c in cars
              orderby c.Price
              select c).FirstOrDefault();
7 голосов
/ 08 октября 2009

Нет способа сделать это. LINQ используется для определения запроса. Это фактически не вызывает оценки, тогда как выполнение FirstOrDefault (или перечисление по нему) выполняет запрос.

4 голосов
/ 08 октября 2009
var bestCar = (from c in cars
          orderby c.Price
          select c).FirstOrDefault()

OR

var bestCar = cars.OrderBy(c => c.Price).FirstOrDefault()
3 голосов
/ 08 октября 2009

    var bestCar = (from c in cars
              orderby c.Price
              select c).FirstOrDefault();

Извините, я не прочитал ваш вопрос полностью, возможно, это именно то, что вы не хотите делать.

0 голосов
/ 17 апреля 2018

В VB вы можете использовать «Aggregate»:

Dim BestCar = Aggregate c In cars
              Order By c.Price
              Into FirstOrDefault
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...