如何使用LINQ从每组分组数据(在VB.Net中)返回第一项
给定一个简单的DTO(AccountExpiry),其属性为“AccountNo”和“ExpiryDate” 并由此创建了一个相同的列表:如何使用LINQ从每组分组数据(在VB.Net中)返回第一项,vb.net,linq,group-by,Vb.net,Linq,Group By,给定一个简单的DTO(AccountExpiry),其属性为“AccountNo”和“ExpiryDate” 并由此创建了一个相同的列表: New AccountExpiry(123, New Date(2012, 4, 1)) New AccountExpiry(123, New Date(2012, 4, 2)) New AccountExpiry(123, New Date(2012, 4, 3)) New AccountExpiry(124, New D
New AccountExpiry(123, New Date(2012, 4, 1))
New AccountExpiry(123, New Date(2012, 4, 2))
New AccountExpiry(123, New Date(2012, 4, 3))
New AccountExpiry(124, New Date(2012, 4, 2))
New AccountExpiry(124, New Date(2012, 4, 3))
New AccountExpiry(124, New Date(2012, 4, 4))
如何使用LINQ检索每个帐户的最新条目
我感觉这将涉及GroupBy和FirstOrDefault
好像
From Item In Source Group By Item.AccountNo Into Group
…应该返回所有适当分组的数据,但不清楚如何将.FirstOrDefault应用于每个组
我相信这对于以前做过这件事的人来说是一个简单的问题,但目前我还不清楚。一种方法是这样的: 首先对项目进行分组,然后获取每组的最新日期,然后选择具有这些最新日期的项目
Module Module1
Class AccountExpiry
Public Property AccountNo As Int32
Public Property ExpiryDate As DateTime
Public Sub New(accountNo As Int32, expiryDate As DateTime)
Me.AccountNo = accountNo
Me.ExpiryDate = expiryDate
End Sub
End Class
Sub Main()
Dim list = {New AccountExpiry(123, New Date(2012, 4, 1)),
New AccountExpiry(123, New Date(2012, 4, 2)),
New AccountExpiry(123, New Date(2012, 4, 3)),
New AccountExpiry(124, New Date(2012, 4, 2)),
New AccountExpiry(124, New Date(2012, 4, 3)),
New AccountExpiry(124, New Date(2012, 4, 4))}
Dim grouped = From ae In list
Group ae By ae.AccountNo Into Group
Dim newest = From g In grouped
Let maxDate = g.Group.Max(Function(e) e.ExpiryDate)
Select g.Group.Single(Function(e) e.ExpiryDate = maxDate)
For Each x In newest
Console.WriteLine(String.Format("{0} : {1}", x.AccountNo, x.ExpiryDate))
Next
Console.ReadKey()
End Sub
End Module
请注意,如果
ExpiryDate
在AccountNo
-组中不是唯一的,则Single()
将失败。例如,您也可以使用First()
,但这取决于您。非常感谢,这很好:)