lambda等价于collection.Count(谓词)

时间:2013-05-19 22:54:33

标签: c# linq

以下代码的等效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};

4 个答案:

答案 0 :(得分:6)

你很接近,只需将LINQ表达式包装在括号中,如下所示:

var c = (from number in numbers where number > 5 select number).Count();

答案 1 :(得分:3)

fromin的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

  

某些查询操作(例如CountMax)没有等效的查询表达式子句,因此必须表示为方法调用。方法语法可以以各种方式与查询语法组合。

答案 3 :(得分:0)

int[] numbers = { 3, 4, 5, 6, 7, 8 };
var n = numbers.Where(x => x > 5).Count();