简体   繁体   English

改善实体框架中的嵌套查询

[英]Improve nested query in entity framework

I'm trying to write the linq to entity query as below: 我正在尝试将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();

I expect that it will generate to following query: 我希望它将生成以下查询:

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)

But it does not, it generates a query look like: 但事实并非如此,它会生成如下查询:

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

How can I make entity framework generate the first query. 如何使实体框架生成第一个查询。

Please try below query: 请尝试以下查询:

SELECT id, <other_columns> 
            FROM review
                        WHERE ref_id = 10
                        ORDER BY updated_time DESC limit1;

Note: ref_id and updated_time fields should be indexed. 注意:ref_id和updated_time字段应建立索引。


As per your updated requirement: 根据您的更新要求:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM