繁体   English   中英

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

[英]IQueryable vs. IEnumerable in the repository pattern , lazy loading

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

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

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

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

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

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

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

IEnumerable vs IQueryable

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM