无法将IQueryable转换为ObjectSet

本文关键字:ObjectSet 转换 IQueryable | 更新日期: 2023-09-27 17:58:27

在我的C#类中,我有以下代码:

var myData= Db.SetName;
myData = myData.Where(p => p.Set2.Date >= start
                && p.Set2.Date <= end);

哪个Db是我的DbObject(或DbContext)

但是我得到以下错误:

Error:Cannot implicitly convert type 'System.Linq.IQueryable<SetName>' to 
'System.Data.Objects.ObjectSet<SetName>'. An explicit conversion exists 
(are you missing a cast?)

问题出在哪里?

无法将IQueryable转换为ObjectSet

此行:

var myData = Db.SetName;

创建并指定一个名为myData、类型为ObjectSet<SetName>的变量。以下行:

myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end);

尝试将类型为CCD_ 3的值分配给同一变量。尽管ObjectSet<SetName>实现了IQueryable<SetName>,但不能将后一种类型的值分配给前一种类型,原因与不能将IAnimal类型的值指定给Dog类型的变量相同。

根本问题是var的使用,因为这隐藏了myData的类型并掩盖了错误的原因。这应该有效:

IQueryable<SetName> myData = Db.SetName;
myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end);

应该是这样的:

var myData = (IQueryable<SetName>)Db.SetName;
myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end);

因为两者都明确地声明myDataIQueryable<SetName>类型并且因此稍后可分配给该类型的值。

您隐式地将myData声明为一种类型,然后尝试将其值分配给另一种类型。改为:

var myData= Db.SetName.Where(p => p.Set2.Date >= start && p.Set2.Date <= end).AsQueryable();

我不确定,因为我不在我的机器里,但你可以在Where()后面加上.AsQueriable(),这样就可以了。