首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含"AsEnumerable()“等价的Linq查询

包含"AsEnumerable()“等价的Linq查询
EN

Stack Overflow用户
提问于 2016-04-26 18:07:54
回答 2查看 641关注 0票数 1

这两个查询在功能上是否等效?

1)

代码语言:javascript
复制
var z=Categories
         .Where(s=>s.CategoryName.Contains("a"))
         .OrderBy(s => s.CategoryName).AsEnumerable()
         .Select((x,i)=>new {x.CategoryName,Rank=i});

2)

代码语言:javascript
复制
var z=Categories.AsEnumerable()
         .Where(s=>s.CategoryName.Contains("a"))
         .OrderBy(s => s.CategoryName)
         .Select((x,i)=>new {x.CategoryName,Rank=i});

我的意思是,查询中"AsNumerable()“的顺序是否改变了从客户端检索的数据项的数量,或者它们的检索方式?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-26 18:15:11

这两个查询在功能上是否等效?

如果您的意思等同于最终结果,那么可能是的(取决于提供者实现这些操作的方式),区别在于您正在使用内存中扩展的第二个查询。

我的意思是,查询中"AsNumerable()“的顺序是否改变了从客户端检索的数据项的数量,或者它们的检索方式?

是的,在第一个查询中,WhereOrderBy将被转换为SQL,Select将在内存中执行。

在第二个查询中,数据库中的所有信息都会被带到内存中,然后在内存中进行过滤和转换。

Categories可能是一个IQueryable,所以您将在Queryable类中使用扩展。这个版本的扩展将接收一个Expression作为参数,这些表达式树允许将代码转换为sql查询。

AsEnumerable()IEnumerable的形式返回对象,因此您将使用直接在内存中执行的Enumerable类中的扩展。

票数 4
EN

Stack Overflow用户

发布于 2017-08-03 10:10:33

是的,他们做同样的事情,但以不同的方式。第一个查询执行SQL数据库本身中的所有选择、排序和条件。

但是,第二个代码段从数据库中获取所有行并将其存储在内存中。然后,在对获取的数据进行排序、命令和应用条件之后,即现在在内存中。

AsEnumerable()将查询分为两部分:

  1. 内部部分(在AsEnumerable之前的查询)以LINQ的形式执行。
  2. 外部部分(AsEnumerable后的查询)作为LINQ执行。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36872594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档