0

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

哪里有问题?

4

3 回答 3

4

这一行:

var myData = Db.SetName;

创建并分配一个名为myDatatype的变量ObjectSet<SetName>。以下行:

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

...尝试将类型的值分配给IQueryable<SetName>同一变量。尽管ObjectSet<SetName>implements IQueryable<SetName>,但您不能将后一种类型的值分配给前一种类型的变量,原因与您不能将 type 的值分配给 typeIAnimal的变量相同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了 type IQueryable<SetName>,因此以后可以分配给该类型的值。

于 2013-02-10T19:04:12.410 回答
2

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

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

于 2013-02-10T14:40:26.107 回答
0

我不确定,因为我不在我的机器上,但你可以.AsQueriable()在之后追加Where(),你很高兴。

于 2013-02-10T15:08:53.043 回答