Поведение FirstOrDefault непосредственно в операторе LINQ

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

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

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

Ответы

Ответ 1

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

Вы можете избежать временного, выполнив follownig

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

Ответ 2

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

Ответ 3

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

ИЛИ

var bestCar = cars.OrderBy(c => c.Price).FirstOrDefault()

Ответ 4


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

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