Goal: I want to select the latest versioned records of a given table:
id
version
name
< /thead>
1 < /td>
0 < /td>
alek < /td>
< /tr>
1 < /td>
1
1
1 < /td> /> alex < /td>
< /tr>
2 < /td>
0 < /td>
bob < /td>
< /tr>
< /tbode>
< /table> < /div>
mote: /br /br /> < /table> < /div>
В идеале это то, что я хочу, чтобы ef core генерировал с использованием CTE's: < /p>
WITH cte (Id, Version) AS
(
SELECT
Id, MAX(Version)
FROM
Table
GROUP BY
Id
)
SELECT a.*
FROM Table a
JOIN cte ON a.Id = cte.Id AND cte.Version = e.Version;
< /code>
Примечание: вот альтернативный, но эквивалентный запрос, если выше невозможно в EF Core: < /p>
SELECT a.*
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Version DESC) rn
FROM Table a
WHERE redacted
) a
WHERE a.rn = 1;
< /code>
c# query linq: < /p>
var query = (from a in context.Test
join j in (from m in context.Test
group m by m.Id
into g
select new { g.Key, Version = g.Max(x => x.Version) })
on new { a.Id, a.Version } equals new { Id = j.Key, j.Version } into gj
select a).ToQueryString();
проблема : фактический сгенерированный запрос SQL полностью пропускает Sun-Query:
SELECT [a].[Id], [a].[Version]
FROM [Employer] AS [e]
Обновление 2024 на основе https://stackoverflow.com/users/14868997/charlieface
Работое решение:
Подробнее здесь: https://stackoverflow.com/questions/774 ... in-ef-core