2
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가 다르므로 각 PersonID에 대해 가장 최근의 레코드를 1 개 반환하려고합니다.LINQ Entity Framework 4에서이 SQL을 작성하는 방법

이상적으로, linq에서 IQueryable로 표현하여 더 큰 쿼리를 작성하는 데 사용할 수 있습니다.

+0

필자는 "PPTID"가 해당 내부 쿼리에서 "PersonID"라고 가정합니까? EffectiveDate> getdate()에 대한 레코드가있을 수 있습니까? –

+0

쿼리가 지금 수정되었습니다. 예 effectiveDates는 앞으로있을 수 있지만 결과에서 제외되어야합니다. – Tom

답변

2
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 
+0

감사합니다. – Tom