2

我知道协方差,而且我知道通常在 v4.0 之前在 C# 中是不可能的。

但是我想知道一个具体的案例。是否有某种方法IQueryable<Derived>可以IQueryable<Base>通过某种方式创建一个实际上不执行查询但实际上可以“通过”.Where<>()调用的包装类来转换?

我的用例是我正在尝试处理具有许多相似表的数据库模式。大部分字段是通用的,很多通用字段需要在每张表上查询。我正在使用 LinqToSql。我希望避免重复每个表的所有查询。

4

2 回答 2

6

以下是您要查找的内容吗?

var results = queryable.OfType<Base>.Where(...);

OfType 方法将收集指定类型的任何内容,并且如果集合中的所有项目都是 Base 类型,或者从类型 base 派生,则它们应该符合条件。在随后的 where 中,所有项目都是 Base 类型。

于 2009-09-24T23:06:23.480 回答
0

以下内容也可以使用,尽管它不那么漂亮:

var results = queryable.Select(derived => (Base)derived).Where(...);
于 2009-09-25T08:09:08.687 回答