这两个查询在功能上是否等效?
1)
var z=Categories
.Where(s=>s.CategoryName.Contains("a"))
.OrderBy(s => s.CategoryName).AsEnumerable()
.Select((x,i)=>new {x.CategoryName,Rank=i});2)
var z=Categories.AsEnumerable()
.Where(s=>s.CategoryName.Contains("a"))
.OrderBy(s => s.CategoryName)
.Select((x,i)=>new {x.CategoryName,Rank=i});我的意思是,查询中"AsNumerable()“的顺序是否改变了从客户端检索的数据项的数量,或者它们的检索方式?
谢谢你的帮助。
发布于 2016-04-26 18:15:11
这两个查询在功能上是否等效?
如果您的意思等同于最终结果,那么可能是的(取决于提供者实现这些操作的方式),区别在于您正在使用内存中扩展的第二个查询。
我的意思是,查询中"AsNumerable()“的顺序是否改变了从客户端检索的数据项的数量,或者它们的检索方式?
是的,在第一个查询中,Where和OrderBy将被转换为SQL,Select将在内存中执行。
在第二个查询中,数据库中的所有信息都会被带到内存中,然后在内存中进行过滤和转换。
Categories可能是一个IQueryable,所以您将在Queryable类中使用扩展。这个版本的扩展将接收一个Expression作为参数,这些表达式树允许将代码转换为sql查询。
AsEnumerable()以IEnumerable的形式返回对象,因此您将使用直接在内存中执行的Enumerable类中的扩展。
发布于 2017-08-03 10:10:33
是的,他们做同样的事情,但以不同的方式。第一个查询执行SQL数据库本身中的所有选择、排序和条件。
但是,第二个代码段从数据库中获取所有行并将其存储在内存中。然后,在对获取的数据进行排序、命令和应用条件之后,即现在在内存中。
AsEnumerable()将查询分为两部分:
https://stackoverflow.com/questions/36872594
复制相似问题