c# – LINQ与Method表达式的差异

为什么 Linq表达式IL会导致省略Select投影,而相应的方法表达式会保留Select投影?

我想这两段代码也是一样的.

var a = from c in companies
                where c.Length >10
                select c;

//

var b = companies.Where(c => c.Length > 10).Select(c => c);

//IL - LINQ

IEnumerable<string> a = this.companies.
Where<string>(CS$<>9__CachedAnonymousMethodDelegate1);

//IL

   IEnumerable<string> b = this.companies.Where<string>
   (CS$<>9__CachedAnonymousMethodDelegate4).Select<string,string>
   (CS$<>9__CachedAnonymousMethodDelegate5);

那为什么IL的区别呢?

编辑:
那么为什么

var a = from c in companies
           select c;

即使在IL内部也会导致SELECT投影.它也可以省略吗?

解决方法

在第二个示例中,对Select的调用不是多余的.如果省略Select调用,查询将只返回原始集合,而Select返回IEnumerable.

在您的第一个示例中,Where已经返回IEnumerable并且select子句没有做任何工作,因此省略它.

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...