Как мне написать этот SQL в LINQ Entity Framework 4
select C.CenterID
from dbo.Center C
inner join (select PersonID, max(EffectiveDate) as EffectiveDate
from Center
where EffectiveDate <= getdate()
group by PersonID) as C2
on C.PersonID= C2.PersonID
and C.EffectiveDate = C2.EffectiveDate
Центральная таблица имеет PersonID и EffectiveDate, несколько записей имеют одинаковый PersonID, но разные EffectiveDates, я пытаюсь вернуть 1 самую последнюю запись для каждого PersonID
в идеале я хочу выразить это в linq как IQueryable, чтобы я мог использовать его для создания больших запросов.
1 ответ
Решение
var q = from c in oc.Center
join c2 in (
from ci in oc.Center
where ci.EffectiveDate <= DateTime.Now
group ci by ci.PersonID into cig
select new { PersonID = cig.Key, EffectiveDate = cig.Max(ed => ed.EffectiveDate) }
) on new { c.PersonID, c.EffectiveDate } equals { c2.PersonID, c2.EffectiveDate }
select c.CenterID