c# - 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 概念中,使用父类型声明的子对象应该知道它实际上是子对象的类型并使用子类型的方法。
解决方案
.Where
on 方法IEnumerable<T>
是扩展方法。
结果,它不能是virtual。只有虚方法表现出您所期望的多态性
推荐阅读
- sql - 获取日期范围的问题
- ios - 无法在 ionic -4 (ios) 上安装“cordova-plugin-ms-adal”
- r - 寻找满足条件语句的时差
- javascript - Mongoose,从每次对话中获取最新消息
- python - 有没有办法确定FilterSet(来自django-filter)执行查询的顺序?
- java - SDK 升级后,Interstitial Ads 拒绝编译
- keycloak - 这些 Keycloak 端点有什么用?
- amazon-web-services - 尽管设置,AWS CloudFront“分发只支持可缓存的请求”
- php - 完整性约束违规:1451 无法删除或更新父行:外键约束失败(SQL:如果存在“问题”则删除表)
- docker - 如何在 MacOS BigSur 上访问 Docker CE 虚拟机?