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

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

我知道LINQ到实体和LINQto对象的一些不同之处,这是第一个实现的。IQueryable和第二个工具IEnumerable我的问题范围在EF 5之内。

我的问题是,这三种方法的技术区别是什么?我看到,在许多情况下,所有这些都有效。我还看到使用它们的组合,如.ToList().AsQueryable().

  1. 这些方法到底意味着什么?

  2. 是否有任何性能问题或什么东西会导致使用一个而另一个呢?

  3. 为什么一种用途,例如,.ToList().AsQueryable()而不是.AsQueryable()?


眼眸繁星
浏览 370回答 3
3回答

宝慕林4294392

托利斯特()立即执行查询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条件。
打开App,查看更多内容
随时随地看视频慕课网APP