I'm trying to write the linq to entity query as below:
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.
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;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.