在我的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?)
问题出在哪里?
答案 0 :(得分:4)
这一行:
var myData = Db.SetName;
创建并分配类型为myData
的名为ObjectSet<SetName>
的变量。以下一行:
myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end);
...尝试将类型IQueryable<SetName>
的值分配给同一个变量。虽然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>
类型,因此可以稍后赋予该类型的值。
答案 1 :(得分:2)
您隐式将myData
声明为一种类型,然后尝试将其值分配给另一种类型。这样做:
var myData= Db.SetName.Where(p => p.Set2.Date >= start
&& p.Set2.Date <= end).AsQueryable();
答案 2 :(得分:0)
我不确定,因为我不在我的机器中,但你可以在.AsQueriable()
之后追加Where()
并且你很乐意去。