为了账号安全,请及时绑定邮箱和手机立即绑定

.ToList()、.AsEnumerable()、AsQueryable()之间有什么区别?

.ToList()、.AsEnumerable()、AsQueryable()之间有什么区别?

眼眸繁星 2019-07-27 17:12:36
.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条件。



查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信