我知道这是Linq:
var _Results = from item in _List
where item.Value == 1
select item;
Run Code Online (Sandbox Code Playgroud)
我知道这是Lambda:
var _Results = _List.Where(x => x.Value == 1);
Run Code Online (Sandbox Code Playgroud)
编者注:以上不仅仅是Lambda,Linq使用的是"方法语法",其谓词是Lambda.需要说明的是,以上两个样本都是Linq(我原来的帖子不正确,但我留下了错误来说明提示问题的混乱).
但是Linq是Lambda的子集还是什么?
为什么有两个看似相同的技术?
是否有技术上的理由来选择其中一个?
Jon*_*Jon 126
这是LINQ(使用查询语法):
var _Results = from item in _List
where item.Value == 1
select item;
Run Code Online (Sandbox Code Playgroud)
这也是LINQ(使用方法语法):
var _Results = _List.Where(x => x.Value == 1);
Run Code Online (Sandbox Code Playgroud)
有趣的是,这两种口味最终会产生完全相同的代码.编译器允许您以您喜欢的方式表达您的意愿,为您提供服务.
而这是一个lambda:
x => x.Value == 1
Run Code Online (Sandbox Code Playgroud)
当您选择使用方法语法时,LINQ几乎总是在lambda表达式中出现.但LINQ和lambdas是两个完全不同的东西,两者都可以自己使用.
更新:正如svick正确指出的那样,带有查询语法的LINQ 也使用lambda表达式实现(如前所述,编译器允许您使用查询语法编写,但有效地将其转换为背后的方法语法).这仅仅是因为这两种风格完全等效并且行为方式相同(例如,lambda表达式可能会导致创建闭包).
Chr*_*ris 34
两者都是Linq.第二个是使用 Lambdas.
Lambdas是内联方法类型的东西,您将作为参数传递给第二个示例中的Where函数.
这两种语法之间的区别纯粹是语法.使用方法调用的第二个linq样式是它在引擎盖下的工作方式.第一个是更加用户友好/更容易,编译器将其转换为幕后方法调用.对于任何给定的查询,它们应该工作相同,当然编译器可能会选择对转换为方法样式时复杂的linq查询的不同解释.
这篇msdn文章也可能是有趣的:LINQ查询语法与方法语法.特别相关的是:"一般来说,我们建议使用查询语法,因为它通常更简单,更易读;但是方法语法和查询语法之间没有语义差异."
归档时间: |
|
查看次数: |
44194 次 |
最近记录: |