将多个列汇总并分组为linq中的一个值

one*_*com 1 c# linq

我有桌子的字段:

ID,sales1, sales2, sales3
1   25      15       15
1   10      7        3
2   8       11       9
3   10      5        7
3   22      9        4
Run Code Online (Sandbox Code Playgroud)

我需要按ID过滤表并返回sales1 + sales2 + sales3的总和.在mysql中,这将完成

SELECT (SUM(sales1) + SUM(sales2) + SUM(sales3)) AS total
WHERE id = 1
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

但我不能让这个在linq工作.有人可以帮我弄这个吗?

Mar*_*rco 5

在LinqPad中一起划过:

void Main()
{
    //since I don't have a suitable database at hand
    //I'm emulating with a list
    var sales = new List<Sale>()
    {
        new Sale() {Id = 1, Sales1 = 25, Sales2= 15, Sales3= 15},
        new Sale() {Id = 1, Sales1 = 10, Sales2= 7, Sales3= 3},
        new Sale() {Id = 2, Sales1 = 8, Sales2= 11, Sales3= 9},
        new Sale() {Id = 3, Sales1 = 10, Sales2= 5, Sales3= 7},
        new Sale() {Id = 3, Sales1 = 22, Sales2= 9, Sales3= 4},
    };

    var filteredSales = sales.GroupBy (s => s.Id)//Need to Group to be able to use .Sum() 
                             //.Where (s => s.Key == 1)
                             .Select (s => new
                              {
                               Id = s.Key,
                               Sum = s.Sum (x => x.Sales1 + x.Sales2 + x.Sales3) 
                              }).Dump(); //ignore Dump. Only available in LinqPad
}

class Sale
{
    public int Id { get; set; }
    public int Sales1 { get; set; }
    public int Sales2 { get; set; }
    public int Sales3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

结果:

Id | Sum
1    75
2    28
3    57
Run Code Online (Sandbox Code Playgroud)

取消注释where子句以按ID过滤.亲切的问候