C# 可以转换IQueryable<;派生>;到IQueryable<;基础>;?
我知道协方差,并且我知道在v4.0之前,在C#中通常不可能实现协方差 然而,我想知道一个具体的案例。是否有某种方法可以将C# 可以转换IQueryable<;派生>;到IQueryable<;基础>;?,c#,.net,linq-to-sql,iqueryable,covariance,C#,.net,Linq To Sql,Iqueryable,Covariance,我知道协方差,并且我知道在v4.0之前,在C#中通常不可能实现协方差 然而,我想知道一个具体的案例。是否有某种方法可以将IQueryable转换为IQueryable,方法是以某种方式创建一个包装类,该类实际上不执行查询,但实际上可以“传递”一个。Where()调用 我的用例是,我正在尝试处理一个具有许多类似表的数据库模式。大多数字段都是公共字段,需要在每个表上查询许多公共字段。我正在使用LinqToSql。我希望避免重复每个表的所有查询。以下是您要查找的内容吗 var results = qu
IQueryable
转换为IQueryable
,方法是以某种方式创建一个包装类,该类实际上不执行查询,但实际上可以“传递”一个。Where()
调用
我的用例是,我正在尝试处理一个具有许多类似表的数据库模式。大多数字段都是公共字段,需要在每个表上查询许多公共字段。我正在使用LinqToSql。我希望避免重复每个表的所有查询。以下是您要查找的内容吗
var results = queryable.OfType<Base>.Where(...);
var results=queryable.of type.Where(…);
OfType方法将收集任何指定类型的项,如果集合中的所有项都是Base类型的项或从Base类型派生的项,则它们应该符合条件。在随后的where中,所有项目都将是Base类型。以下内容也将起作用,尽管它不那么漂亮:
var results = queryable.Select(derived => (Base)derived).Where(...);
哇!现在我觉得自己很笨。看来这正是我需要的。谢谢。没问题。:)很高兴我能帮上忙。应该注意的是,如果派生的类型实际上不是Base,那么这将失败。如果集合包含不一定从公共基派生的各种对象,OfType将安全地跳过那些未能通过强制转换的对象,然后继续。