2011-12-06 4 views
0

clientCLID 및 EmailAddress별로 그룹화해야하는 첨부 파일 목록이 있습니다. 이 그룹화 된 목록에서 clientCLID 목록 만 있으면됩니다.vb.net에서 여러 열로 그룹화하는 더 좋은 방법이 있습니까

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 그룹은 지저분합니다!

편집

난 그냥 ... 다음 예) (별개의 봅니까 어차피 :

ClientGuid EmailAddress  

A   [email protected] 
A   [email protected]  
A   [email protected] 
: 나는 3 번 최종 목록에 표시 클라이언트 A를 필요 여기

여기에서는 클라이언트 A가 최종 목록에 한 번만 표시되기를 원합니다.

ClientGuid EmailAddress 
A   [email protected] 
A   [email protected] 
A   [email protected] 
+0

을 그래서 당신이 원하는 모든이의 목록입니다 명백한'attachment.ClientCLID's? – AakashM

+0

@AakashM 사과 - 아니 그게 내가 뭘 필요하지 않습니다 위의 편집 참조하십시오 – woggles

답변

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() 
+0

덕분에이 완벽하게 일했습니다. VB linq 구문은 나를 혼란스럽게합니다! – woggles

+1

VB.NET의 기능적 그룹핑 예제를 가져 주셔서 감사합니다. 문제없이 람다 표기법을 사용하여 그룹화를 수행 할 수 있었지만 익명의 개체를 사용하여 기능 표기법으로 그룹화 할 수없는 이유를 알 수 없었습니다. 'Key' 예약 어가 모든 차이를 만들었습니다. – lsuarez

+0

정말로 감사합니다. C#에서 작업하는 쿼리가 있었는데 VB.NET으로 변환 할 때 왜 그룹화가 작동하지 않는지 알 수 없었습니다. 위에서 말했듯이,'GroupBy (Function (f) New with {Key f ...})'는 갈 길입니다. 'Key'가 없으면 그룹화가 작동하지 않습니다. –

관련 문제