以下代码的等效lambda表达式
int[] numbers = { 3, 4, 5, 6, 7, 8 };
int count = numbers.Count(x => x > 5 == true);
我试过这个,但它没有编译:
var c = from number in numbers where number > 5 select numbers.Count;
这个也没有编译:
var c = from number in numbers where number > 5 select new {numbers.Count};
答案 0 :(得分:6)
你很接近,只需将LINQ表达式包装在括号中,如下所示:
var c = (from number in numbers where number > 5 select number).Count();
答案 1 :(得分:3)
from
和in
的LINQ样式称为“查询语法”:
from row in table where row.col1 < 10 select row.col1
它通常包含比“方法语法”更少的lambda表达式:
table.rows.Where(r => r.col1 < 10).Select(r => r.col1)
你也可以将它们混合起来。例如,这会为所有行创建一个组,并计算行数。需要使用类似FirstOrDefault()
的方法调用来实现值:
int c = (
from n in numbers
where n > 5
group n by 1 into g
select g.Count()
).FirstOrDefault();
答案 2 :(得分:2)
您所谈论的是查询语法,并非所有LINQ方法在查询语法中都具有等效性。最简洁的表达是numbers.Count(x => x > 5)
。来自docs:
某些查询操作(例如
Count
或Max
)没有等效的查询表达式子句,因此必须表示为方法调用。方法语法可以以各种方式与查询语法组合。
答案 3 :(得分:0)
int[] numbers = { 3, 4, 5, 6, 7, 8 };
var n = numbers.Where(x => x > 5).Count();