我有一个linq to sql查询
var items = from p in ctx.bam_Zending_AllInstances
join q in ctx.bam_Zending_CompletedRelationships
on p.ActivityID equals q.ActivityID
join r in ctx.bam_Prestatie_AllInstances
on q.ReferenceData equals r.ActivityID
where q.ReferenceType == "Activity" &&
p.Zendingnummer == zenderNr
orderby r.PrestatieCode
select new Data.BAMPrestatieInstance
{
Aanvaard = r.PrestatieAanvaard,
Contactnummer = r.ContactNr,
Foutmelding = r.Foutmelding,
Identificatie = r.Identificatie,
Ontvangen = r.PrestatieZendingOntvangen,
Uitvoerdatum = r.Uitvoerdatum,
ZendingsNr = p.Zendingnummer,
PrestatieCode = r.PrestatieCode
};
这将返回多个“r.PrestatieCode”的类列表。然而,“Uitvoerdatum”是一个日期,我需要每个r.PrestatieCode只有最新日期。我应该怎么做呢?因为我知道如何在sql中执行此操作,但我似乎无法找到在linq中执行此操作的方法。
实际上需要这么多,
任何帮助都很有用,
感谢一帮!
的Gr
答案 0 :(得分:0)
如果您知道如何在SQL中执行此操作,则可以将其编写为:
yourDataContext.ExecuteQuery<Data.BAMPrestatieInstance>(
"<sql query>");
答案 1 :(得分:0)
可能有一种更优化的方式,但这会做你想要的。上面定义了items
:
var whatYouWant = items
.GroupBy(r => r.PrestatieCode)
.Select(
g => g.Single(
r => r.Uitvoerdatum == g.Max(s => s.Uitvoerdatum)
)
);
这样做:首先,它按Data.BAMPrestatieInstance.PrestatieCode
对结果集进行分组。然后,从具有相同Data.BAMPrestatieInstance.PrestatieCode
的每个组中,它会提取最大Data.BAMPrestatieInstance.Uitvoerdatum
,然后找到Data.BAMPrestatieInstance.Uitvoerdatum
等于该最大日期的唯一项。如果没有Data.BAMPrestatieInstance.Uitvoerdatum
等于该最大日期的唯一项目,您可以相应地更改(例如,使用Where
代替Single
。)
如果我误解了您的要求,请告诉我。