我已经阅读了一些文章,声明IEnumerable用于模仿存储过程或限制数据库。外部提供商丢失了延迟加载能力。
IQueryable在哪里为开发人员提供更大的灵活性。延迟加载就在那里。
在性能方面,两者都消耗了大量的性能..那么哪一个更优选呢?
答案 0 :(得分:25)
从存储库模式的角度来看,你可以这样想:
如果要一次性将整个列表传递给客户端,请使用急切加载IEnumerable
。他们仍然可以添加linq子句,但客户端不会从延迟执行中受益。
如果要通过允许客户端添加自己的linq子句,将延迟查询功能扩展到客户端,请使用延迟加载IQueryable
。这将延迟执行整个查询,直到需要输出为止。
答案 1 :(得分:2)
答案 2 :(得分:0)
“IEnumerable”和“IQueryable”之间的主要区别在于执行过滤器逻辑的位置。一个在客户端执行(在内存中),另一个在数据库上执行。
因此,当从内存集合(如List,Array等)查询数据时,您应该使用IEnumerable。
另一方面,当从外部存储器(如远程数据库,服务)集合中查询数据时,您应该使用IQueryable。