选择多个字段group by和sum

use*_*420 29 c# linq asp.net linq-group

我想用linq(对象列表)进行查询,我真的不知道怎么做,我可以做组和总和但不能选择其余的字段.例:

ID  Value     Name   Category
1   5         Name1  Category1  
1   7         Name1  Category1
2   1         Name2  Category2
3   6         Name3  Category3
3   2         Name3  Category3
Run Code Online (Sandbox Code Playgroud)

我希望按ID分组,按值按SUM分组并返回所有这样的字段.

ID  Value     Name   Category
1   12        Name1  Category1  
2   1         Name2  Category2
3   8         Name3  Category3
Run Code Online (Sandbox Code Playgroud)

Dia*_*ita 71

更新:如果您尝试避免对所有字段进行分组,则可以按Id以下方式分组:

data.GroupBy(d => d.Id)
    .Select(
        g => new
        {
            Key = g.Key,
            Value = g.Sum(s => s.Value),
            Name = g.First().Name,
            Category = g.First().Category 
        });
Run Code Online (Sandbox Code Playgroud)

但是这段代码假设每个Id,相同NameCategory适用.如果是这样,你应该考虑正常化,因为@Aron建议.它意味着保持IdValue在一个类中移动Name,Category(以及相同的其他任何字段Id对于另一个类),同时也有Id参考.规范化过程减少了数据冗余和依赖性.