是Linq还是Lambda?

我知道这是Linq:

var _Results = from item in _List where item.Value == 1 select item; 

而我知道这是Lambda:

 var _Results = _List.Where(x => x.Value == 1); 

编者按:以上不仅仅是Lambda,它是Linq使用谓词是Lambda的“Method Syntax”。 要清楚的是,以上两个样本都是Linq(我原来的post是不正确的,但是我留下错误来说明混淆提示这个问题)。

但是Linq是Lambda的子集还是什么?

为什么有两个看似相同的技术?

是否有技术上的理由来select一个吗?

这是LINQ(使用查询语法):

 var _Results = from item in _List where item.Value == 1 select item; 

这也是LINQ(使用方法语法):

 var _Results = _List.Where(x => x.Value == 1); 

有趣的是, 这两种口味最终都会产生完全相同的代码。 编译器为您提供服务,允许您以您喜欢的方式expression您的愿望。

是一个lambda:

 x => x.Value == 1 

当你select使用方法语法时,LINQ几乎总是在lambdaexpression式附近出现。 但LINQ和lambda是两个完全不同的东西,两者都可以自己使用。

更新:正如svick正确地指出,与查询语法的LINQ 使用lambdaexpression式实现(如前所述,编译器允许您在查询语法中编写,但有效地将其转换为背后的方法语法)。 这只是堆积如山的事实,这两种口味是完全等效的,并将以相同的方式行事(例如,lambdaexpression式可能导致闭包被创build)。

两人都是Linq。 第二个是使用 Lambdas 。

Lambdas是在第二个示例中作为parameter passing给Where函数的内联方法types的东西。

这两种语法之间的区别纯粹是句法。 第二个使用方法调用的linq风格是它如何工作的。 第一个是为了更方便用户使用/编译器将其转换为幕后方法调用。 他们应该为任何给定的查询工作相同,当然编译器可能会select一个复杂的linq查询略有不同的解释转换为方法样式。

这个MSDN文章也许是有趣的: LINQ查询语法与方法语法 。 特别相关的是:“一般来说,我们推荐查询语法,因为它通常更简单,更易读;但是在方法语法和查询语法之间没有语义上的区别。