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

前端之家收集整理的这篇文章主要介绍了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子句没有做任何工作,因此省略它.

猜你在找的C#相关文章