Linq to SQL最新日期

时间:2009-12-04 14:18:56

标签: sql linq

我有一个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

2 个答案:

答案 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。)

如果我误解了您的要求,请告诉我。