【发布时间】:2015-03-18 15:10:55
【问题描述】:
我理解为什么IQueryable 和IEnumerable exist,但我不清楚从IQueryable 派生的IEnumerable 有什么好处。
我遇到的一个缺点:
-
任何创建自己的
IEnumerable扩展方法的人都可能很容易意外地将看似无辜的IQueryable查询转换为低效的IEnumerable调用。例如,使用 MoreLinq:Users.DistinctBy(u => u.Address).Where(u => u.Age >= 18)
(这将使用IEnumerable.Where 而不是IQueryable.Where,除非我错过了上述的IQueryable 实现)
IQueryable 的工作方式,内部 Expression 被链式语句改变,似乎与链式函数的正常工作方式完全不同。
我怀疑这个接口继承有一些我可能没有充分利用的强大优势。与例如执行查询的显式转换相比,让IQueryable 实现IEnumerable 有什么好处?
【问题讨论】:
-
从这个 API 设计引起的 Stack Overflow 问题的数量来看,我会说你是对的。
-
如果您想知道为什么 MS 做出了他们所做的决定,那么您需要询问他们,而不是让我们猜测他们做出决定的原因他们确实做到了,因为这根本没有成效,也不是一个客观可以回答的问题。
-
@Servy 这里有各种各样的 MS 程序员/前 MS 程序员,而且这些问题经常被提供知识:-)
-
@xanatos 然而,在成千上万曾经做过 MS 程序员的人中,只有少数人参与了这个决定。这里有全世界只有少数人能回答的问题,而且他们读到这些问题的几率微乎其微,对这里的每个人来说都不是有效的。
-
@MichaelParker 编辑后,问题比以前更加基于意见/主观。
标签: c# linq ienumerable iqueryable