加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:36:41 所属栏目:百科 来源:网络整理
导读:为什么 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 - LINQIEnumerablest
为什么 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子句没有做任何工作,因此省略它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读