Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以转换IQueryable<;派生>;到IQueryable<;基础>;?_C#_.net_Linq To Sql_Iqueryable_Covariance - Fatal编程技术网

C# 可以转换IQueryable<;派生>;到IQueryable<;基础>;?

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

我知道协方差,并且我知道在v4.0之前,在C#中通常不可能实现协方差

然而,我想知道一个具体的案例。是否有某种方法可以将
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将安全地跳过那些未能通过强制转换的对象,然后继续。