2014-04-24 5 views
0

개체 목록을 쿼리하고 그룹화 한 다음 자체 목록으로 목록 목록으로 출력 할 수 있습니까? 설명 할 방법을 모르겠습니다. 그래서 내가 보여 드리겠습니다.linq 쿼리의 개체 목록 목록 가져 오기

public class Note 
{ 
    string CreatorID; 
    string Title; 
    string Text; 
} 

필자는 채워진 메모 목록 (List<Note> noteList)을 가지고 있습니다. 각 제작자마다 여러 명의 작성자와 여러 개의 메모가 있습니다. LINQ 쿼리를 사용하여 CreatorID로 노트를 그룹화하고 노트를 분리하여 노트 목록 (List<List<Note>> creatorsNotes)으로 출력하는 방법이 있는지 파악하려고합니다. 이렇게하면 제작자와 노트 목록을 생성자를 통해 반복 할 수 있습니다.

답변

6

가장 쉬운 ToLookup을 사용하는 것입니다 : 필요한 경우도 GroupBy를 사용할 수

var groups = noteList.ToLookup(n => n.CreatorID); 

foreach(var group in groups) 
{ 
    Console.WriteLine("Items with CreatorID {0}", group.Key); 
    foreach(var item in group) 
      Console.WriteLine(" Title: {0}", item.Title); 
} 

. 그러나 이것들은 직접 List<List<Note>>을 생성하지는 않습니다. 그이 필요한 경우, 당신은 할 수 : 리드에 의해 지적

var creatorNotes = list 
    .GroupBy(note => note.CreatorID) 
    .Select(g => new 
    { 
     g.CreatorID, 
     Notes = g.ToList() 
    }) 
    .ToList(); 

,이 그룹화 나타내는 익명 형식의 목록입니다

List<List<Note>> grouped = noteList.GroupBy(n => n.CreatorID) 
            .Select(g => g.ToList()) 
            .ToList(); 
+0

+1 ToLookup 전략에도 마찬가지입니다. –

+0

답장을 보내 주셔서 감사합니다. 갈대의 그룹 두통의 양을 줄이면서 원하는 것을 정확히 나에게주었습니다. – Jeremy

0

물론,의는 list이 (가) List<Note>하자하자 CreatorID은 루트에 있고 NotesCreatorID과 연관되어 있습니다.

+0

그러면 키 + 목록을 포함하는 익명 형식의 목록이 만들어집니다. –

+0

@ReedCopsey, 그렇습니다. 따라서 OP는 그룹이 무엇인지 알 수 있습니다. 나는 당신이 제공 한 룩업 전략에 대한 또 다른 방법이라고 생각한다. –