可以将IQueryable <derived>转换为IQueryable <base />?</derived>

时间:2009-09-24 22:57:11

标签: c# .net linq-to-sql iqueryable covariance

我知道协方差,而且我知道一般来说,直到v4.0才能在C#中实现。

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

我的用例是我正在尝试处理具有许多类似表的数据库模式。大多数字段都是共同的,需要在每个表上查询许多常见字段。我正在使用LinqToSql。我希望避免重复每个表的所有查询。

2 个答案:

答案 0 :(得分:5)

以下是您要找的内容吗?

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

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

答案 1 :(得分:0)

以下内容也适用,但不太好看:

var results = queryable.Select(derived => (Base)derived).Where(...);