Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在林克有什么是可能的,但兰姆达没有?_.net_Linq_Lambda - Fatal编程技术网

.net 在林克有什么是可能的,但兰姆达没有?

.net 在林克有什么是可能的,但兰姆达没有?,.net,linq,lambda,.net,Linq,Lambda,我正在考虑一个.net项目(c sharp语言)的代码标准,我个人非常喜欢在IEnumerable等的各种扩展方法中使用lambda表达式(Where、GroupBy、blah、blah),但不太喜欢LINQ语法 我知道这是个人喜好,所以我不是在问哪一个最好,但对于我和我的团队来说,我们倾向于发现lambda方法更容易阅读。所以我想说,在我们的编码标准中,总是使用Lambda方法,但我想 是否有任何东西只能使用LINQ语法来实现?我的意思是,您可以使用LINQ构建一个特定的表达式树,而您无法使用

我正在考虑一个.net项目(c sharp语言)的代码标准,我个人非常喜欢在IEnumerable等的各种扩展方法中使用lambda表达式(Where、GroupBy、blah、blah),但不太喜欢LINQ语法

我知道这是个人喜好,所以我不是在问哪一个最好,但对于我和我的团队来说,我们倾向于发现lambda方法更容易阅读。所以我想说,在我们的编码标准中,总是使用Lambda方法,但我想


是否有任何东西只能使用LINQ语法来实现?我的意思是,您可以使用LINQ构建一个特定的表达式树,而您无法使用lambda表达式的扩展方法。我认为答案是否定的,因为像resharper和linqpad这样的工具能够在它们之间进行转换,我已经能够解决lambda中我所需要的所有问题,但我想知道这里的聪明人是否知道有一个边缘案例?

LINQ表达式实际上是作为扩展方法编译的,编译器已经更新,可以做到这一点,但是在后台有一个IL,它根本不知道这个新语法。因此,实际上是另一种方式,你可以用扩展方法做一些你用Linq做不到的事情,更不用说你可以轻松地为自己创建新的扩展方法,你将无法从“Linq语法”调用表达式语法(
在某物中从x调用…
)由编译器转换为扩展方法语法。与表达式语法相比,使用扩展方法可以做更多的事情(尽管后者有时可能更简单)。

可能和方便是不同的;p一切皆有可能;LINQ语法最终会编译为lambda语法,而扩展语法中可能存在的东西在LINQ语法中是不可能的(
Distinct()
在C#,例如,尽管它存在于VB.NET LINQ中)

然而!当LINQ查询中有大量变量时,这是一个很难映射的问题,因为需要对中间对象(可能是匿名类型)进行大量额外的投影;例如,尝试编写(lambda语法):


这是可能的,但坦率地说是一个PITA。

这是一个很好的例子,说明了LINQ。。。它让编译器完成所有PITA工作。LINQ语法是扩展方法语法的一个方便子集。
var query = from x in xSource
            from y in x.SomeCollection
            from z in zSource
            let foo = x.Foo + z.SomeMethod()
            order by foo
            select new {x,y,z,foo};