joh*_* Gu 10 ienumerable iqueryable asp.net-mvc-3
如果我有以下代码: -
IQueryable<People> list = repository.FindAllPeople;
int count = list.Count();
Run Code Online (Sandbox Code Playgroud)
然后认为计算IQueryable对象是不可行的,使用IEnumerable更好吗?BR
Bro*_*ass 20
你被误导了.
IEnumerable
将Linq用于对象,所有方法都在内存中的对象上执行.- IQueryable
将使用特定提供程序提供的Linq扩展方法的任何实现.在这种情况下(存储库)我猜它很可能是一个将Linq表达式映射到数据库语句的提供程序.
这意味着如果您使用IQueryable
:
IQueryable<People> list = repository.FindAllPeople;
int count = list.Count();
Run Code Online (Sandbox Code Playgroud)
计数在数据库本身上确定,即作为查询"select count(*) from People"
.这通常非常非常快.
如果您使用IEnumerable
:
IEnumerable<People> list = repository.FindAllPeople;
int count = list.Count();
Run Code Online (Sandbox Code Playgroud)
所有People实例将逐个实现内存,而Linq to objects正在遍历集合以确定计数.这将非常缓慢,应尽可能避免.
由于并非所有方法调用都可以映射到数据库查询,因此有时不可避免地使用IEnumerable
,但是如果可能的话,应该在IQueryable上完成所有过滤,连接和分组,然后作为最后一步,您可以使用AsEnumerable()
扩展方法切换到使用IEnumerable
和Linq对象.
归档时间: |
|
查看次数: |
6451 次 |
最近记录: |