2014-06-25 4 views
-1

У меня есть список, и я хочу объединить объекты с одним и тем же именем в одном и добавить братьев и сестер в список других братьев и сестер.Использование Linq для сравнения двух списков

public class People 
{ 
    string Name {get; set;} 
    List<string> siblings {get; set;} 
} 

Теперь у меня есть список, который выглядит как

List<People> list3 = new List<People> 
{ 
    new People 
    { 
     name = "Chris", 
     siblings = {"Richard"} 
    }, 
    new People 
    { 
     name = "Billy", 
     siblings = {"Thomas"} 
    }, 
    new People 
    { 
     name = "Bob", 
     siblings = {"Charles"} 
    }, 
    new People 
    { 
     name = "Chris", 
     siblings = {"Simon"} 
    } 
} 

Теперь я хочу, чтобы превратиться в:

List<People> list3 = new List<People> 
{ 
    new People 
    { 
     name = "Chris", 
     siblings = {"Richard", "Simon"} 
    }, 
    new People 
    { 
     name = "Billy", 
     siblings = {"Thomas"} 
    }, 
    new People 
    { 
     name = "Bob", 
     siblings = {"Charles"} 
    } 
} 
+2

Вы код содержит ошибки на имена свойств и инициализацию братьев и сестер в первую очередь. – Dom

+0

@RyanEmerle только что попробовал selectMany с выбором – Beastwood

ответ

4

Ваш текущий способ конкатенации список не должен работать, в противном случае вам нужно:

var query = list3.GroupBy(r => r.Name) 
       .Select(grp => new People 
       { 
        Name = grp.Key, 
        Siblings = grp.SelectMany(r => r.Siblings).ToList(), 
       }); 

Для получения комбинированного списка вы можете сделать:

List<People> list3 = list1.Concat(list2).ToList(); 
2

Я думаю, что что-то, как это должно работать.

var list3 = list2.Concat(list1).GroupBy(p => p.name) 
    .Select(g => new People{ 
     name= g.Key, 
     siblings = from p in g 
        from s in p.siblings 
        select s 
    }); 
+3

+1, это также может быть так: 'siblings = g.SelectMany (p => p.siblings)' –

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