【发布时间】:2018-08-04 02:58:33
【问题描述】:
我观看了 this 视频并阅读了 this 博客文章。这篇文章中有一些东西让我感到困惑;帖子的最后一部分。在最后一部分 Mosh 强调,Repository 永远不应该返回 IQueryable,因为它会导致性能问题。但我读到一些听起来矛盾的东西。
这是令人困惑的部分:
IEnumerable:从数据库中查询数据时,IEnumerable 在服务器端执行选择查询,在客户端将数据加载到内存中,然后过滤数据。因此做更多的工作并变得缓慢。
IQueryable:从数据库中查询数据时,IQueryable 在服务器端使用所有过滤器执行选择查询。因此,工作量减少并变得更快。
this is another answer 关于存储库模式中的 IQueryable 与 IEnumerable。
这些与 Mosh 的建议相反。如果这些都是真的,为什么我们不应该使用 IQueryable 而不是 IEnumerable。
还有别的,我们想使用 OData 的情况呢?如您所知,通过 OData 进行查询时,最好使用 IQueryable 而不是 IEnumerable。
还有一件事,使用 OData 查询电子商务网站 API 是好是坏。
请告诉我你的意见。
谢谢
【问题讨论】:
-
我遇到了一些非常相似的事情,我已经确定没关系。如果您有一个公开 IQuerable
Find(Expression predicate) 或类似内容的存储库 - 您可以传入过滤器的初始要求集,然后允许应用程序完成其余工作。如果 IQuerable 正确实现,则实际执行将推迟到需要时。 -
我能想到的唯一真正的争论是您是否需要选择字段的子集而不是整个对象。您仍然可以这样做,但使用自定义提供程序会变得更加困难。
标签: odata ienumerable repository-pattern iqueryable