我知道协方差,而且我知道通常在 v4.0 之前在 C# 中是不可能的。
但是我想知道一个具体的案例。是否有某种方法IQueryable<Derived>
可以IQueryable<Base>
通过某种方式创建一个实际上不执行查询但实际上可以“通过”.Where<>()
调用的包装类来转换?
我的用例是我正在尝试处理具有许多相似表的数据库模式。大部分字段是通用的,很多通用字段需要在每张表上查询。我正在使用 LinqToSql。我希望避免重复每个表的所有查询。
我知道协方差,而且我知道通常在 v4.0 之前在 C# 中是不可能的。
但是我想知道一个具体的案例。是否有某种方法IQueryable<Derived>
可以IQueryable<Base>
通过某种方式创建一个实际上不执行查询但实际上可以“通过”.Where<>()
调用的包装类来转换?
我的用例是我正在尝试处理具有许多相似表的数据库模式。大部分字段是通用的,很多通用字段需要在每张表上查询。我正在使用 LinqToSql。我希望避免重复每个表的所有查询。
以下是您要查找的内容吗?
var results = queryable.OfType<Base>.Where(...);
OfType 方法将收集指定类型的任何内容,并且如果集合中的所有项目都是 Base 类型,或者从类型 base 派生,则它们应该符合条件。在随后的 where 中,所有项目都是 Base 类型。
以下内容也可以使用,尽管它不那么漂亮:
var results = queryable.Select(derived => (Base)derived).Where(...);