gpt4 book ai didi

c# - Entity Framework 不一致 - 在这里工作,而不是那里

转载 作者:行者123 更新时间:2023-11-30 17:59:30 25 4
gpt4 key购买 nike

我首先使用现有数据库处理 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; }
}

我正在尝试获取具有特定 的最新 StartDate 记录的值(即 SomeValueSomeOtherValue) >一些ID。我第一次尝试查询是这样的:

(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 可能比第一个在表上具有适当索引(我愿意创建)的查询更快。问题是第二个查询抛出一个 SystemArgumentException 消息:

Object of type 'System.Data.Objects.ObjectQuery'1[myClassDbSet]' cannot be converted to type 'System.Data.Entity.DbSet'1[myClassDbSet]'.

这是在查询声明中抛出的,而不是在尝试执行它时抛出的。

最奇怪的是,不同类中的相同查询(字面意思是复制和粘贴)工作正常。有人知道我做错了什么吗?

最佳答案

你可能不会喜欢这个答案,但我认为如果你要花这么多麻烦来优化 linq 输出的 sql,那么用 sql 编写它会更容易。

关于c# - Entity Framework 不一致 - 在这里工作,而不是那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11108977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com