LINQ Queries& Lambda表达式

时间:2011-03-16 15:51:06

标签: linq lambda

为什么在LINQ查询时使用lambda表达式只是为了缩短代码长度,提高开发速度,或者是否有任何其他原因只能通过Lambda表达式来实现?不是通过LINQ查询。

2 个答案:

答案 0 :(得分:21)

查询表达式仅涵盖LINQ运算符的一小部分,并且仅在涉及实际表达式时才适用,而不是(假设)使用Func<T, bool>作为谓词,在这种情况下事情变得丑陋。所以不要写:

Func<Foo, bool> predicate = ...; // Get predicate from somewhere
var query = from x in collection
            where predicate(x)
            select x;

我更愿意写:

Func<Foo, bool> predicate = ...; // Get predicate from somewhere
var query = collection.Where(predicate);

还有其他一些情况,使用非查询表达式语法更简单,特别是如果您的查询只使用单个运算符。

查询表达式被有效地转换为非查询表达式,因此您在查询表达式中可以执行的任何操作都可以在非查询表达式中表达。使用查询表达式,使代码更简单,更易读;如果他们不这样做,请不要使用它们。

我有更多关于查询表达式如何在您感兴趣的blog post中工作的信息。

答案 1 :(得分:3)

  

任何其他只能通过Lambda表达式实现的原因。不是通过LINQ查询。

有一些LINQ扩展方法在LINQ query expressions中没有对应的,并且需要使用Lambda表达式。一个很好的例子是Enumerable.ToLookup - 如果你想创建一个ILookup,你需要使用lambdas来生成它。