У меня есть IEnumerable с полями Name (string) и Amount (ulong). Я хочу получить один запрос LINQ, чтобы сгруппировать эти элементы по имени, а затем получить их сумму и среднее значение этой суммы.
Чтобы получить сумму сгруппированных элементов, я сделал что-то вроде этого
collection.GroupBy(x => x.Name).Select(x => new { Key = x.Key, Sum = x.Sum(e => Int32.Parse(e.Amount.ToString()))});
Он отлично работает, но есть ли способ теперь получить среднее значение для каждой группы, не создавая отдельный LINQ, метод или что-то еще?
Я пробовал несколько способов, но ни один из них не был правильным. Лучшее, что я сделал, это получить среднее значение каждой суммы: /
Вы должны иметь возможность добавить еще один элемент в анонимный тип, чтобы вернуть среднее значение, аналогично тому, как вы возвращаете сумму.
collection.GroupBy(x => x.Name)
.Select(x => new {
Key = x.Key,
Sum = x.Sum(e => Int32.Parse(e.Amount.ToString()),
Avg = x.Average(e => Int32.Parse(e.Amount.ToString())
});
омг так просто, но так сложно СПАСИБО!
Нет необходимости преобразовывать Amount в String, а затем в Int32. Вместо этого вы можете просто сделать
(int)e.Amount
.