我有一个附件列表,我需要通过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
答案 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()