FirstOrDefault行为直接在LINQ语句中

时间:2009-10-07 21:17:46

标签: linq

似乎我可能在语法中遗漏了一些简单的东西,但是我想直接从linq语句中获取FirstOrDefault的结果,而不必先将IEnumerable存储在临时变量中。像这样:

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

我知道第一个关键字实际上并不存在,但说明了我想要做的事情。 我也知道我可以在括号中包含from ... select语句并直接调用FirstOrDefault ,但我认为上面的语法更清晰,更易于阅读。

5 个答案:

答案 0 :(得分:27)

Enumerable.FirstOrDefault是Enumerable类中的一个扩展方法,它没有相应的LINQ语法元素。绑定到此方法的唯一方法是通过方法调用语法。

您可以通过以下操作来避免临时性

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

答案 1 :(得分:7)

没有办法做到这一点。 LINQ用于定义查询。这样做实际上不会导致评估,而执行FirstOrDefault(或枚举它)会执行查询。

答案 2 :(得分:4)

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

OR

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

答案 3 :(得分:3)


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

抱歉,我没有完全看到你的问题,看来这可能正是你不想做的事情。

答案 4 :(得分:0)

在VB中你可以使用'Aggregate':

Dim BestCar = Aggregate c In cars
              Order By c.Price
              Into FirstOrDefault