2016-03-15 3 views
0

Мне нужно взять список объектов, созданных в результате запроса с объединениями и т. Д., И создать иерархию объектов от одного до многих. Как мне это сделать с Linq?Коллекция плоских коллекций от одного до большого

class Source 
{ 
    int Id, 
    string Name, 
    .... 
    int MemberId, 
    string MemberName, 
    .... 
} 

class Target 
{ 
    int Id, 
    string Name, 
    .... 
    ICollection<Member> Members 
} 

class Member 
{ 
    int Id, 
    string Name, 
    .... 
} 

Пример данных

List = 
{ 
    new Source {Id = 1, Name = "Test1", ... MemberId = 1, MemberName = "John", ...}, 
    new Source {Id = 2, Name = "Test2", ... MemberId = 2, MemberName = "Max", ...}, 
    new Source {Id = 2, Name = "Test2", ... MemberId = 4, MemberName = "Ruby", ...} 
} 

Желаемый результат

List = 
{ 
    new Target {Id = 1, Name = "Test1", ... 
       Members = new List { new Member {Id = 1, Name = "John", ...}} 
      }, 
    new Target {Id = 2, Name = "Test2", ... 
       Members = new List { new Member {Id = 2, Name = "Max", ...}, 
            new Member {Id = 4, Name = "Ruby", ...}} 
      } 
} 

ответ

0

Вы ищете Enumerable.GroupBy, вы должны группе анонимного типа:

var result = List 
    .GroupBy(s => new { s.Id, s.Name }) 
    .Select(xGrp => new Target 
    { 
     Id = xGrp.Key.Id, 
     Name = xGrp.Key.Name, 
     Members = xGrp 
      .Select(s => new Member 
      { 
       Id = s.MemberId, 
       Name = s.MemberName 
      }) 
      .ToList() 
    }) 
    .ToList(); 
+0

Большое спасибо, это то, что я искал – Matt

Смежные вопросы