IQueryable
和 IEnumerable
,但是我不清楚 IQueryable
派生于 IEnumerable
会带来哪些好处。其中一个我遇到的缺点是:
Anyone creating their own
IEnumerable
extension methods can easily accidentally transform an innocent lookingIQueryable
query into an inefficientIEnumerable
call. For example, using MoreLinq:Users.DistinctBy(u => u.Address).Where(u => u.Age >= 18)
这将使用 IEnumerable.Where
而不是 IQueryable.Where
,除非我错过了上述方法的 IQueryable
实现。
IQueryable
的工作方式,具有一个内部的 Expression
,该表达式会被连锁语句所修改,似乎与通常期望的链式函数的工作方式相当不同。
我怀疑这种接口继承具有一些强大的优点,而我可能没有充分利用。与例如执行查询的显式转换相比,拥有 IQueryable
实现 IEnumerable
的好处是什么?