我首先使用现有数据库使用 EF 4.1 代码。我有一个看起来像这样的类:
class myClass
{
[Key]
[Column("SomeID", Order=0)]
public int SomeID { get; set; }
[Key]
[Column("Dt", Order=1)]
public DateTime StartDate { get; set; }
public String SomeValue { get; set; }
public int SomeOtherValue { get; set; }
}
我正在尝试获取特定记录的最新值(即SomeValue
, ) 。我对查询的第一次尝试是这样的:SomeOtherValue
StartDate
SomeID
(from x in myContext.myClassDbSet
where x.SomeID == myVariable
orderby x.StartDate descending
select x).FirstOrDefault()
这工作正常,但我意识到它不是最佳的,所以我尝试将其更改为以下内容:
(from x in myContext.myClassDbSet
where x.SomeID == myVariable
&& x.StartDate == (from x2 in myContext.myClassDbSet
where x2.SomeID == x.SomeID
select x2.StartDate).Max()
select x).FirstOrDefault()
LINQPad 为第二个查询生成的 SQL 可能比第一个在表上有适当索引的 SQL 更快(我愿意创建)。问题是第二个查询抛出了一条SystemArgumentException
消息:
'System.Data.Objects.ObjectQuery'1[myClassDbSet]' 类型的对象无法转换为'System.Data.Entity.DbSet'1[myClassDbSet]' 类型。
这是在查询声明中抛出的,而不是在尝试执行它时。
最奇怪的是,不同类中的相同查询(字面意思是复制和粘贴)可以正常工作。有人知道我在做什么错吗?