首页 > 解决方案 > IQueryable vs IEnumerable 和多态,其中一个对象知道它是哪个子类

问题描述

当显式声明查询的类型时,IEnumerable例如

IEnumerable<string> q = 
    from c in db.Customers      
    select c.ContactName;   
var q2 = q.Where(s => s.StartsWith(start)); 
return q2;

查询将使用Enumerable.where. 为什么查询不知道它是IQueryable并且使用Queryable.where

这似乎与 OOP 概念相矛盾,在 OOP 概念中,使用父类型声明的子对象应该知道它实际上是子对象的类型并使用子类型的方法。

标签: c#linqoopienumerableiqueryable

解决方案


.Whereon 方法IEnumerable<T>是扩展方法

结果,它不能是virtual。只有虚方法表现出您所期望的多态性


推荐阅读