Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LINQ从每组分组数据(在VB.Net中)返回第一项_Vb.net_Linq_Group By - Fatal编程技术网

如何使用LINQ从每组分组数据(在VB.Net中)返回第一项

如何使用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

给定一个简单的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 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()
,但这取决于您。

非常感谢,这很好:)