C# 实体框架中嵌套查询的改进
我正在尝试编写linq到实体查询,如下所示:C# 实体框架中嵌套查询的改进,c#,mysql,linq,entity-framework,nested-query,C#,Mysql,Linq,Entity Framework,Nested Query,我正在尝试编写linq到实体查询,如下所示: var lst = (from rw in ctx.Reviews where rw.RefId == 10 && rw.UpdatedTime == (from inner in ctx.CompareReviews where inner.RefId == 10
var lst = (from rw in ctx.Reviews
where rw.RefId == 10
&& rw.UpdatedTime == (from inner in ctx.CompareReviews
where inner.RefId == 10
&& inner.ReviewNumber == rw.ReviewNumber
select inner.UpdatedTime).Max()
select rw).ToList();
我希望它将生成以下查询:
select *
from review rw
where rw.ref_id = 10
and rw.updated_time = (select max(irw.updated_time)
from review irw
where irw.ref_id = 10
and irw.review_number = rw.review_number)
但事实并非如此,它生成的查询如下所示:
select rw.id,
/* .. other fields */
(
select max(irw.updated_time)
from review irw
where irw.ref_id = 10
and irw.review_number = rw.review_number
) as updated_time
from review rw
where rw.ref_id = 10
如何使实体框架生成第一个查询。请尝试以下查询:
SELECT id, <other_columns>
FROM review
WHERE ref_id = 10
ORDER BY updated_time DESC limit1;
注意:ref_id和updated_time字段应编入索引
根据您的最新要求:
SELECT review_number,id, <other_columns>
FROM
(SELECT id,ref_id,<other_columns> FROM review
WHERE ref_id = 10
ORDER BY updated_time DESC) a
GROUP BY review_number;
结果是否有误,或者只是查询的形式与您期望的不符?实体框架有时会优化生成的sql,除非生成的数据是错误的,否则您不应该为此操心。不,结果是正确的。但执行大约需要10秒。我的第一个查询是关于0的。3s@TuTran,如果您希望基于ref_id=10的更新的_时间字段获得最新的单行,那么还有其他方法可以获得更好的性能。请确认这是否是您的要求,以便我可以与您共享查询。@ZafarMalik:是的,这是我的要求。我可以通过将查询分为两个步骤来加快查询速度。如果你有更好的办法,请告诉我哦,对不起。我忘了告诉您,我的表中有review_number字段请参见我的OP。每个review_number都有许多记录,我想根据最新更新的时间获取最新记录谢谢您的帮助,但您的查询不起作用。另外,你似乎误解了我的要求。我尝试使用实体框架,我发布的第一个查询工作得很好,只是生成的查询很慢。