是否有更好的方法可以在vb.net中按多列进行分组

时间:2011-12-06 09:44:58

标签: vb.net linq

我有一个附件列表,我需要通过clientCLID和EmailAddress进行分组。从这个分组列表中我只需要一个clientCLID列表。

在摆弄了一段时间后,我设法按照以下方式开始工作:

Dim ClientCLIDs As New List(Of Guid)

Dim groupedAttachments = attachments.GroupBy(Function(j) New With {Key j.ClientCLID, Key j.EmailAddress}).Select(Function(group) New With {Key .compKey = group.Key.ClientCLID}).ToList()

For Each attachment In groupedAttachments
Dim clientGuid As Guid = New Guid(attachment.compKey.ToString())
ClientCLIDs.Add(clientGuid)
Next

有更好/更清洁/更简单的方法吗?语法的vb组很讨厌!

修改

我不能做distinct()...请参阅以下示例:

在这里,我需要客户端A出现在最终列表中3次:

ClientGuid EmailAddress    

A          b@b.com
A          sds@fdd.com       
A          ieieid@dd.com

在这里,我只希望客户A在最终列表中出现一次

ClientGuid EmailAddress
A          bob@bob.com
A          bob@bob.com
A          bob@bob.com

1 个答案:

答案 0 :(得分:3)

您可以删除选择器内的匿名类型,并直接获取guid列表:

attachments.GroupBy(Function(j) New With {Key j.ClientCLID, Key j.EmailAddress}). _
Select(Function(group) group.Key.ClientCLID).ToList()

这是另一种做同样事情的方法:

(From j In attachments
Select New With {Key j.ClientCLID, Key j.EmailAddress}).
Distinct.Select(Function(client) client.ClientCLID).ToList()