Объединить дубликаты и средние значения

Вопрос:

У меня есть список объектов, которые могут содержать или не содержать объекты с тем же свойством. В случаях, когда существуют дубликаты (например, объекты с тем же значением свойства), я хотел бы объединить их, усреднив их значения.

Например (фактические объекты могут иметь более 3 свойств):

var myList = List<Attribute>(){
new Attribute(){Id = "Score", Label = "Score", Rating = 4.5},
new Attribute(){Id = "Price", Label = "Retail Price", Rating = 14.99},
new Attribute(){Id = "Score", Label = "Score", Rating = 3.5},
new Attribute(){Id = "Value", Label = "Overall Value", Rating = 5}
}

Я хотел бы объединить два атрибута с свойством Id = “Score” и взять среднее значение двух рейтингов, чтобы получить что-то вроде:

var myList = List<Attribute>(){
new Attribute(){Id = "Score", Label = "Score", Rating = 4.0},
new Attribute(){Id = "Price", Label = "Retail Price", Rating = 14.99},
new Attribute(){Id = "Value", Label = "Overall Value", Rating = 5}
}

Я считаю, что мне нужно использовать GroupBy, Select и Average что-то вроде этого псевдокода myList.GroupBy(x => x.Id).Select(x=> new{ x.Id, x.Label, x.Average(x=>x.Rating)} )

Может кто-нибудь указать мне в правильном направлении, пожалуйста? Большое спасибо.

Лучший ответ:

Не уверен, что такое свойство Label, будет ли оно одинаковым всегда? Тем не менее, это должно выглядеть так:

var output = myList.GroupBy(x => x.Id,
                            (key, values) => new Attribute() 
                            {
                               Id = key,
                               Label = values.First().Label,
                               Rating = values.Average(v => v.Rating)
                            })
                    .ToList();

Оцените статью
TechArks.Ru
Добавить комментарий