Улучшить вложенный запрос в структуре сущностей
Я пытаюсь написать запрос 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;