6

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

4 回答 4

6

您已经接近了,只需将 LINQ 表达式包装在括号中,如下所示:

var c = (from number in numbers where number > 5 select number).Count();
于 2013-05-19T22:56:49.883 回答
3

from带有和的 LINQ 样式in称为“查询语法”:

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();
于 2013-05-19T23:04:26.790 回答
2

您所说的是查询语法,并非所有 LINQ 方法都具有等效的查询语法。最简洁的表达方式是numbers.Count(x => x > 5)。从文档

某些查询操作,例如Countor Max,没有等效的查询表达式子句,因此必须表示为方法调用。方法语法可以通过多种方式与查询语法相结合。

于 2013-05-19T23:02:31.040 回答
0
int[] numbers = { 3, 4, 5, 6, 7, 8 };
var n = numbers.Where(x => x > 5).Count();
于 2016-07-19T07:50:30.137 回答