无法将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?)
问题出在哪里?
此行:
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);
因为两者都明确地声明myData
是IQueryable<SetName>
类型并且因此稍后可分配给该类型的值。
您隐式地将myData
声明为一种类型,然后尝试将其值分配给另一种类型。改为:
var myData= Db.SetName.Where(p => p.Set2.Date >= start
&& p.Set2.Date <= end).AsQueryable();
我不确定,因为我不在我的机器里,但你可以在Where()
后面加上.AsQueriable()
,这样就可以了。