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个最新记录我怎么写这个SQL在LINQ实体框架4

理想情况下,我想在linq中将它表示为IQueryable,以便我可以使用它构建更大的查询。

+0

我认为“PPTID”在该内部查询中应该是“PersonID”?有没有记录EffectiveDate> getdate()? – 2011-01-21 02:24:59

+0

现在查询被纠正,是有效日期可以在将来,但他们应该被排除在结果 – Tom 2011-01-21 04:09:36

回答

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