Улучшить вложенный запрос в структуре сущностей

Я пытаюсь написать запрос linq to entity, как показано ниже:

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

Как сделать так, чтобы структура сущности генерировала первый запрос?

1 ответ

Пожалуйста, попробуйте ниже запрос:

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;
Другие вопросы по тегам