Linq group by с несколькими значениями

Итак, у меня есть простой класс Person:

public class Person
{
    internal int PersonID;
    internal string car;
    internal int count;
}

и я хочу сгруппировать по PersonID, чтобы получить список всех автомобилей и сумму всех подсчетов:

public class Result
{
    public int PersonID;
    public List<string> cars;
    public int sum;
}

Я умею группировать и составлять суммирование:

var sums = from foo in persons
       group foo by foo.PersonID into groupings

       select new Result
       {
           PersonID = groupings.Key,               
           sum = groupings.Sum(g => g.count)
       };

Но как мне создать список автомобилей в Result?

Здравый смысл говорит, что PersonID должен быть уникальным, так как же получить список строк для одного идентификатора?

Gert Arnold 26.10.2018 09:13
1
1
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это может быть один из примеров с anonymous class, но должен быть таким же с Result:

List<Person> p = new List<Person>
{
    new Person {PersonID = 1, car = "Audo", count = 1},
    new Person {PersonID = 1, car = "Bmw", count = 2},
    new Person {PersonID = 1, car = "Reno", count = 3},
    new Person {PersonID = 2, car = "Audi", count = 1},
    new Person {PersonID = 3, car = "Audi", count = 1},
};

var res = p.GroupBy(i => i.PersonID).Select(g =>
    new {
            ID = g.Key, 
            Cars = g.Select(_ => _.car).ToList(), 
            Count = g.Sum(_ => _.count)
    });

Работает отлично! Спасибо!

DisplayJoe 26.10.2018 09:44

Другие вопросы по теме