C# 获取基本IQueryable实例的Count()

C# 获取基本IQueryable实例的Count(),c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,我需要在运行时确定从哪个视图填充记录集。但是,当我将recordSet声明为IQueryable时,我将失去对Count()等函数的访问权限 如果我将recordSet声明为IQueryable,则我有访问权,但我已锁定该类型。是否有更通用的类型可用于IQueryable IQueryable recordSet; if (Flag) recordSet = db.View_A.Where(v => v.ID == Id); else recordSet = db.Vie

我需要在运行时确定从哪个视图填充
记录集。但是,当我将
recordSet
声明为
IQueryable
时,我将失去对
Count()等函数的访问权限
如果我将
recordSet
声明为
IQueryable
,则我有访问权,但我已锁定该类型。是否有更通用的类型可用于
IQueryable

IQueryable recordSet;

if (Flag)
    recordSet = db.View_A.Where(v => v.ID == Id);
else
    recordSet = db.View_B.Where(v => v.ID == Id);

int recordCount = recordSet.Count(); //complains about Count();
扩展名用于
IQueryable
类型,这就是为什么不能在
IQueryable
上使用它的原因

但是,如果以以下方式声明记录集,则应允许代码正常工作:

IQueryable<Object> recordSet;
IQueryable记录集;

正如@hvd在下面的评论中所指出的,这里的协方差只适用于引用类型。

这对我来说是奇怪的易懂的暗示IEnumerable@Blam
IQueryable
IEnumerable
都没有
Count()
扩展方法。只有它们的泛型对应项才可以。1)它实际上应该是
Queryable.Count
扩展方法,用于
IQueryable
,除非您希望从数据库检索所有结果并在程序中对其进行计数。2) 协方差不允许将
IQueryable
视为
IQueryable
,它只适用于引用类型。这一限制可能对OP有影响,也可能对OP没有影响,但至少应该在您的回答中提及。@hvd 1)谢谢,我倾向于混合这两种限制。2) 我假设db实体不会是结构类型,但这仍然是一个有效点。补充。