无法将IQueryable转换为ObjectSet

时间:2013-02-10 10:45:12

标签: c# asp.net asp.net-mvc entity-framework

在我的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?)

问题出在哪里?

3 个答案:

答案 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()并且你很乐意去。