.ToList()、.AsEnumerable()、AsQueryable()之间有什么区别?我知道LINQ到实体和LINQto对象的一些不同之处,这是第一个实现的。IQueryable和第二个工具IEnumerable我的问题范围在EF 5之内。我的问题是,这三种方法的技术区别是什么?我看到,在许多情况下,所有这些都有效。我还看到使用它们的组合,如.ToList().AsQueryable().这些方法到底意味着什么?是否有任何性能问题或什么东西会导致使用一个而另一个呢?为什么一种用途,例如,.ToList().AsQueryable()而不是.AsQueryable()?
3 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
托利斯特()
立即执行查询
AsEnDigable()
延迟(稍后执行查询) 参数: Func<TSource, bool>
负载 每一,每个
记录到应用程序内存,然后处理/过滤它们。(例如,WHERE/Take/Skip,它将从表1中选择*,进入内存,然后选择第一个X元素)(在本例中,它所做的事情:Linqto-SQL+Linqto-Object)
AsQueryable()
延迟(稍后执行查询) 参数: Expression<Func<TSource, bool>>
将表达式转换为T-SQL(与特定提供程序一起),远程查询并将结果加载到应用程序内存中。 这就是为什么DbSet(在实体框架中)也继承了IQueryable来获得高效的查询。 不要加载每条记录,例如,如果采用(5),它将在后台生成SELECT 5*SQL。这意味着这种类型对SQL数据库更友好,这也是为什么这种类型通常具有更高的性能,并且在处理数据库时建议这样做。 所以 AsQueryable()
通常比 AsEnumerable()
因为它首先生成T-SQL,其中包括Linq中的所有WHERE条件。
- 3 回答
- 0 关注
- 369 浏览
添加回答
举报
0/150
提交
取消