这两个查询在功能上是否相同?
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()”的顺序是否会更改从客户端检索的数据项的数量,或者检索它们的方式?
谢谢你的帮助。
答案 0 :(得分:3)
这两个查询在功能上是否相同?
如果通过等效表示最终结果,则可能是(取决于提供程序如何实现这些操作),区别在于您使用内存扩展的第二个查询。
我的意思是," AsNumerable()"的顺序是什么?在查询中更改 从客户端检索的数据项数量或它们的方式 检索?
是的,在第一个查询中,Where
和OrderBy
将转换为 SQL ,Select
将在内存中执行。
在第二个查询中,数据库中的所有信息都被带入内存,然后在内存中进行过滤和转换。
Categories
可能是IQueryable
,因此您将使用Queryable
类中的扩展程序。此版本的扩展接收Expression
作为参数,这些表达式树允许将代码转换为sql查询。
AsEnumerable()
将对象作为IEnumerable
返回,因此您将使用Enumerable
类中直接在内存中执行的扩展。
答案 1 :(得分:1)
是的他们以不同的方式做同样的事情。第一个查询执行SQL数据库本身的所有选择,排序和条件。
但是,第二个代码段从数据库中提取所有行并将其存储在内存中。然后,它对所获取的数据进行排序,排序和应用条件,即现在在内存中。
AsEnumerable()将查询分为两部分: