C# 是林克还是兰姆达?

C# 是林克还是兰姆达?,c#,linq,lambda,C#,Linq,Lambda,我知道这是林克: var _Results = from item in _List where item.Value == 1 select item; 我知道这是拉姆达: var _Results = _List.Where(x => x.Value == 1); 编者按:以上不仅仅是Lambda,而是Linq使用的“方法” “语法”,其谓词是Lambda。要明确的是,以上两种情况 示例是Linq(我原来的帖子不正确,

我知道这是林克:

var _Results = from item in _List
                where item.Value == 1
                select item;
我知道这是拉姆达:

var _Results = _List.Where(x => x.Value == 1);
编者按:以上不仅仅是Lambda,而是Linq使用的“方法” “语法”,其谓词是Lambda。要明确的是,以上两种情况 示例是Linq(我原来的帖子不正确,但我留下了错误 说明引起问题的困惑)

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

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

是否有技术原因选择其中一个而不是另一个?

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

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

值得注意的是,最终将生成完全相同的代码。编译器为您提供了一项服务,允许您以自己喜欢的方式表达自己的愿望

这是一只羔羊:

x => x.Value == 1
当您选择使用方法语法时,LINQ几乎总是出现在lambda表达式中。但是和是两个完全不同的东西,它们都可以自己使用


更新:正如斯维克正确指出的那样,LINQ with query syntax也使用lambda表达式实现(如前所述,编译器允许您使用查询语法编写,但可以有效地将其转换为背后的方法语法)。这仅仅是因为这两种口味完全相同,并且行为方式相同(例如,可能会创建lambda表达式)。

两者都是Linq。第二个是使用

lambda是内联方法类型,在第二个示例中,作为参数传递给Where函数

这两种语法之间的区别纯粹是句法上的。使用方法调用的第二种linq风格是它在后台的工作方式。第一种方法更方便用户,编译器将其转换为幕后的方法调用。对于任何给定的查询,它们的工作原理应该是相同的,当然,编译器可能会选择与转换为方法样式时略有不同的复杂linq查询解释


此msdn文章可能也很有趣:。特别相关的是:“一般来说,我们建议使用查询语法,因为它通常更简单、更可读;但是方法语法和查询语法之间没有语义上的区别。”

我认为值得一提的是,查询语法在幕后也使用lambdas。这一点很重要,因为闭包。我个人认为方法语法更具可读性——可能是因为我的大部分代码都是“LINQ到对象”类型的。但如果你有丰富的SQL经验,也许查询语法一开始会更容易理解。@tombushell,甚至JOIN-syntax?“真的吗?”汤姆·布希尔:我也是。我解释了MSDN页面上的一些内容,这大概解释了为什么他们费心开发这种语法,而不仅仅是方法风格。我通常只是做一些相对基本的事情,而不是连接或其他更复杂的事情(例如大部分是过滤或一对一映射操作)。@Jerry-和Chris一样,我的LINQ工作到目前为止相当简单。我已经读过,在执行SelectMany、Join或GroupJoin时,查询语法通常更可取——我只是还不需要这样做!在内部,LINQ to SQL和LINQ to Entities团队将“查询语法”称为“理解语法”。更正:
var _Results = _List.Where(x => x.Value == 1);
x => x.Value == 1