存储库模式中的IQueryable与IEnumerable,延迟加载

时间:2012-01-20 21:13:25

标签: c# .net lazy-loading iqueryable

我已经阅读了一些文章,声明IEnumerable用于模仿存储过程或限制数据库。外部提供商丢失了延迟加载能力。

IQueryable在哪里为开发人员提供更大的灵活性。延迟加载就在那里。

在性能方面,两者都消耗了大量的性能..那么哪一个更优选呢?

3 个答案:

答案 0 :(得分:25)

从存储库模式的角度来看,你可以这样想:

  1. 如果要一次性将整个列表传递给客户端,请使用急切加载IEnumerable。他们仍然可以添加linq子句,但客户端不会从延迟执行中受益。

  2. 如果要通过允许客户端添加自己的linq子句,将延迟查询功能扩展到客户端,请使用延迟加载IQueryable。这将延迟执行整个查询,直到需要输出为止。

  3. 另见
    Deferred execution and eager evaluation

答案 1 :(得分:2)

IEnumerable vs IQueryable

IQueryable最适合服务器端数据,而IEnumerable最适合在客户端使用的数组/列表。

答案 2 :(得分:0)

“IEnumerable”和“IQueryable”之间的主要区别在于执行过滤器逻辑的位置。一个在客户端执行(在内存中),另一个在数据库上执行。

因此,当从内存集合(如List,Array等)查询数据时,您应该使用IEnumerable。

另一方面,当从外部存储器(如远程数据库,服务)集合中查询数据时,您应该使用IQueryable。