Ваша проблема в том, что Math.Round
требует decimal
, а не (обнуляется) decimal?
.
Вы могли бы сделать что-то вроде этого:
decimal?[] values = { 0.1M, 0.123M, 0.456M, 0.345M, null, 0.2M, 0.01M, null, 0.367M };
var grouped = values.GroupBy(x => x.HasValue ? (decimal?)Math.Round(x.Value, 1) : null);
foreach (var group in grouped)
{
Console.WriteLine("Group {0} has these members:", group.Key == null ? "Null" : group.Key.ToString());
foreach (var groupMember in group)
{
Console.WriteLine("> {0}", groupMember == null ? "Null" : groupMember.ToString());
}
}
Это сохраняет значения null
, отображая их в группу с помощью клавиши null
. Если вас это не волнует, вы можете сделать что-то вроде этого:
var grouped = values.Where(x => x.HasValue).Select(x => x.Value).GroupBy(x => Math.Round(x, 1));
чтобы все было не обнуляемым decimal
.