【发布时间】:2018-07-17 10:09:31
【问题描述】:
我有以下几点:
class Base
class Derived : Base
IQueryable<Derived> queryable = ???
Expression<Func<Base, bool>> filter = ???
我想用表达式过滤可查询的内容,并返回一个IQueryable<Derived>。
但是,Expression 是不变的。这意味着queryable.Where(filter) 被推断为Where(this IQueryable<Base>, Expression<Func<Base, bool>>),并返回IQueryable<Base> 而不是IQueryable<Derived>。
C# 不允许将 filter 转换为 Expression<Func<Derived, bool>>,并且将 Where 返回的 IQueryable<Base> 转换为 IQueryable<Derived> 在运行时失败。
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: c# iqueryable linq-expressions variance