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

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

IQueryable可以为开发人员提供更大的灵活性。 懒惰装载就在那里。

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

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

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

  2. 当您希望通过允许客户端添加自己的linq子句来向客户端扩展延迟查询function时,请使用延迟加载IQueryable 。 这延迟了整个查询的执行,直到需要输出为止。

也可以看看
延期执行和急切评估

IEnumerable vs IQueryable

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

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

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

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