然后Linq组由2列组成,并获得每组的最后一行

时间:2014-02-03 07:05:20

标签: sql vb.net linq group-by

我有一张桌子

Table1
PKID    FID     DATE            Col1        Col2
=================================================
1       1       01.01.2014      ABC     QWE
2       1       02.02.2014      BCD     QWE
3       1       03.03.2014      CDE     ASD
4       1       01.01.2014      DEF     AAS
4       2       02.02.2014      EFG     ASD
4       2       03.03.2014      FGH     ASD

我正在尝试按 PKID FID 对此表进行分组,并使用LINQ获取与最新日期对应的行。 我试过这个:

Dim T1= From t In Table1 _
        Group By t.PKID, t.FID Into Group _
        Select PKID, FID, LastDate = Group.Max(Function(p) p.DATE)

现在我有一个PKID,FID和LastDate的表,如下所示:

T1
PKID    FID     LastDate            
==========================
1       1       01.01.2014
2       1       02.02.2014
3       1       03.03.2014
4       2       03.03.2014

对于这个表,我需要像这样添加Table1中的最后两列

Result
PKID    FID     LastDATE        Col1    Col2
=================================================
1       1       01.01.2014      ABC     QWE
2       1       02.02.2014      BCD     QWE
3       1       03.03.2014      CDE     ASD
4       2       03.03.2014      FGH     ASD

在SQL中,它将保留在T1的三列上。我知道这不是最好的解决方案,但这就是我所得到的。 不知道如何在LINQ中执行此操作,或者是否有更好的解决方案。

PS:Table1上有一个唯一的INDEX( PKID FID DATE

1 个答案:

答案 0 :(得分:0)

找到this

Dim ResultTable = From x In Table1 _
                  Group x By x.PKID, x.FID Into grp = Group _
                  Select New With {PKID, FID , .Record = (From x In grp Order By x.DATA Descending).FirstOrDefault()})

我必须测试它,但它似乎有用......