C# 实体框架中嵌套查询的改进

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

我正在尝试编写linq到实体查询,如下所示:

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都有许多记录,我想根据最新更新的时间获取最新记录谢谢您的帮助,但您的查询不起作用。另外,你似乎误解了我的要求。我尝试使用实体框架,我发布的第一个查询工作得很好,只是生成的查询很慢。