У меня есть список объектов, которые имеют 2 строковых атрибута и несколько двойных атрибутов каждый - есть дублирующиеся строки в том смысле, что строковые атрибуты одинаковы, а двойные атрибуты различны. Я пытаюсь объединить эти дубликаты в одну новую строку, которая вычисляется из значений двойных атрибутов. Упрощенный пример:
1. A, Text1, 5
2. A, Text2, 4
3. B, Text1, 7
4. A, Text1, 3
Взяв 'вычисленную строку' в качестве простого среднего, я должен получить:
1. A, Text1, 4 (5+3)/2
2. A, Text2, 4
3. B, Text1, 7
Вот что я сейчас делаю:
var groups = (from t in MyList group t by new { t.Field1, t.Field2});
foreach (var @group in groups)
{
if (@group.Count() > 1)
{
var newRow = new MyObject
{
Field1 = @group.ElementAt(0).Field1,
Field2 = @group.ElementAt(0).Field2,
Field3 = @group.Average(i => i.Field3)
};
}
}
Который работает нормально. Я просто не уверен, как заменить строки в группах, над которыми я перебираю, так как для групп нет доступных методов remove
. Первоначально я пытался сделать это с помощью вложенного для сравнения циклов, но поскольку я не мог изменить список, по которому я перебирал, я сохранял соответствующие индексы, но , что означало, что у меня n * (n -1) / 2 совпадений ...
Мне не хватает совершенно простого способа сделать это? Я не могу поверить, что это очень сложно, но я еще не смог решить это.