似乎我可能在语法中遗漏了一些简单的东西,但是我想直接从linq语句中获取FirstOrDefault的结果,而不必先将IEnumerable存储在临时变量中。像这样:
var bestCar = from c in cars
orderby c.Price
select first c
我知道第一个关键字实际上并不存在,但说明了我想要做的事情。 我也知道我可以在括号中包含from ... select语句并直接调用FirstOrDefault ,但我认为上面的语法更清晰,更易于阅读。
答案 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