2014-12-30 9 views
0

VB.Net에 여러 그룹이있는 IGroup을 반복하는 방법에 대해 여기 및 웹에서 아카이브를 살펴 보았습니다. C#에 대한 몇 가지 솔루션이 있지만 VB.Net로 변환하는 데 정말 어려움을 겪고 있습니다. 여기 VB.New 여러 그룹으로 LINQ 그룹을 반복하는 방법

내가 여기

dim merge_list As List(Of MergeData) 

을 그룹화하고 내 목록입니다 목록의 세 가지 속성에 의해 그룹 내 코드는 내가 그룹을 통해하지만 난 돈 때문에 루프를 시도

Dim groups = merge_list.GroupBy(Function(t) New With {Key t.GUID.Category, 
             Key t.GUID.FeatureType, 
             Key t.GUID.AssetType}) _ 
             .Where(Function(grp) grp.Count > 1) 

다음이다 그룹 목록의 항목에 대한 유형 (즉, 희미한 그룹으로 일부 유형)이있는 경우 해당 항목을 다루는 방법을 모르겠습니다. 여기

dim group '===note there is no "As SomeType" for group just 'Dim group'=== 
For Each group In groups 
    ' since group is not typed I cannot figure out how to work with it 

next 

누군가가 나를 VB.NET을 사용하여 여러 그룹과 IGoup을 반복하는 방법을 알려 주시기 바랍니다 수있는 그룹을 통해 루프 내 코드?

+0

'For Each '앞에'group'을 선언 할 필요는 없습니다. 이런 식으로 컴파일러는'groups'에있는 항목의 유형을 알아 내야합니다. – MarcinJuraszek

+0

이 질문은 투표를 거절했습니다. 어떻게 개선 할 수 있습니까? –

+0

예 "그룹이 선언되지 않았으며 보호 수준으로 인해 액세스 할 수 없습니다"라는 컴파일러 오류가 발생하는 경우 VB를 사용하면서 그룹을 선언해야합니다. 나는 당신이 이것을 할 필요가없는 C#을 선호한다. VB는 실망 스럽습니다. –

답변

2

groupFor Each 외부에 선언 할 필요가 없습니다. 다음 코드를 체크 아웃 :

Dim source = Enumerable.Range(0, 1000) 

Dim groups = source.GroupBy(Function(x) New With { 
           Key .ByFive = x Mod 5, 
           Key .ByTen = x Mod 10, 
           Key .ByTwenty = x Mod 20}) 

For Each group In groups 
    Console.WriteLine("ByFive: {0}, ByTen: {1}, ByTwenty: {2}, Count: {3}", 
        group.Key.ByFive, group.Key.ByTen, group.Key.ByTen, group.Count()) 
Next 

그것은 잘 컴파일 및 인쇄 :

ByFive: 0, ByTen: 0, ByTwenty: 0, Count: 50 
ByFive: 1, ByTen: 1, ByTwenty: 1, Count: 50 
ByFive: 2, ByTen: 2, ByTwenty: 2, Count: 50 
ByFive: 3, ByTen: 3, ByTwenty: 3, Count: 50 
ByFive: 4, ByTen: 4, ByTwenty: 4, Count: 50 
ByFive: 0, ByTen: 5, ByTwenty: 5, Count: 50 
ByFive: 1, ByTen: 6, ByTwenty: 6, Count: 50 
ByFive: 2, ByTen: 7, ByTwenty: 7, Count: 50 
ByFive: 3, ByTen: 8, ByTwenty: 8, Count: 50 
ByFive: 4, ByTen: 9, ByTwenty: 9, Count: 50 
ByFive: 0, ByTen: 0, ByTwenty: 10, Count: 50 
ByFive: 1, ByTen: 1, ByTwenty: 11, Count: 50 
ByFive: 2, ByTen: 2, ByTwenty: 12, Count: 50 
ByFive: 3, ByTen: 3, ByTwenty: 13, Count: 50 
ByFive: 4, ByTen: 4, ByTwenty: 14, Count: 50 
ByFive: 0, ByTen: 5, ByTwenty: 15, Count: 50 
ByFive: 1, ByTen: 6, ByTwenty: 16, Count: 50 
ByFive: 2, ByTen: 7, ByTwenty: 17, Count: 50 
ByFive: 3, ByTen: 8, ByTwenty: 18, Count: 50 
ByFive: 4, ByTen: 9, ByTwenty: 19, Count: 50 

For Each 내부 group를 처리 할 때 당신은 심지어 IntelliSense를 얻을!

+0

당신이 허밍하게 만드는 것들? 코드를 사용할 때 동일한 컴파일러 오류가 발생합니다. 스크린 샷을 찍어서 내가 미쳐 있지 않다는 것을 증명했습니다. https://drive.google.com/a/slingblade.co.nz/file/d/0B-NzIeN88P9lUVRKRXZDWUpPNk0/view?usp=sharing. Visual Studio의 설정이어야합니까? 나는 내가 무엇을 찾을 수 있는지 찾고 찾을 것이다. –

+0

Tools> Options> Project and Settings> VB Defaults 설정 영역에서 두 플래그가 모두 설정되어 있어도 Option Strict Off 및 Option Infer On을 클래스에 수동으로 추가해야했습니다. 내가 이것을 한 후에 나는 인텔리 센스를 사용할 수 있었다. 도와 주셔서 감사합니다! –

+0

누군가 내 질문에 찬성표를 던졌습니다. (그는 C#과 VB.Net 코드를 아무 단어없이 조합하여 썼습니다.) 나는 정중하게 문제를 지적하고 답변을 삭제하고 내 질문에 투표했습니다. . 만약 당신이 그것의 ok 질문에 투표 할 수 있다고 생각한다면 제발 투표 해 주시겠습니까? 나는 명성 점수를 얻으려고 애쓰다. –

2

단순히 이런 각각에 대해 중첩을 사용 : -

For Each item In groups 
     Console.WriteLine(item.Key.GUID.Category) //You can access only `Keys` here 
     For Each inneritem In item 
       Console.WriteLine(inneritem.GUID.Category) 
       //so on (You can access all the properties here) 
     Next 
Next 

확인이 Fiddle.

+0

감사합니다. 바이올린은 당장 무너질 것 같습니다. –

+0

죄송합니다.나를 위해 그것의 개방. –

+0

예, 지금은 이상합니다. 좋은 사이트를 처음 들었습니다. 나는 가입했다. –