如何使用 LINQ 将正确的字段放入组和求和中

本文关键字:求和 字段 LINQ 何使用 | 更新日期: 2023-09-27 18:33:11

我在这个结构中有一个对象(债务人)列表

 public class DebtorDto 
    {
        public string OutstandingBalance { get; set; }
        public string Name { get; set; }
        public string Company { get; set; }
        public string InvoiceNumber { get; set; }
    }

看起来像

OUTSTANDINGBALANCE  NAME    COMPANY  INVOICENUMBER
1500                Debtor1 comp1    1235      
1600                Debtor1 comp3    1236      
150                 Debtor2 comp1    1234      
1700                Debtor2 comp4    1237      
15000               Debtor1 comp1    1238      
150                 Debtor1 comp3    1239      
500                 Debtor4 comp1    1274      
1500                Debtor3 comp3    1634      
500                 Debtor3 comp1    1334      

我想做的是提供每个债务人所欠的总金额(总和)

例如(请注意,下面的总金额不准确,我刚刚编造了它们,但他们需要汇总上述金额)

Debtor1  31050
Debtor2  3050
Debtor3  1050
Debtor4  41050

到目前为止,我所拥有的是

var query = from e in _allDebtors.GroupBy(x => x.Company)
                .Select(y => y.Sum(z => decimal.Parse(z.OutstandingBalance))))))

这实际上给了我正确的金额,如下所示,但我不知道如何在那里获得债务人的名字?

31050
3050
1050
41050

如何使用 LINQ 将正确的字段放入组和求和中

您需要

更改Select中的返回值:

var query = _allDebtors.GroupBy(x => x.Company)
            .Select(y => new { Company=y.Key, Total=y.Sum(z => decimal.Parse(z.OutstandingBalance)) });

请注意,这是按公司 - 如果您希望由债务人提供,它将是:

var query = _allDebtors.GroupBy(x => x.Name)
            .Select(y => new { Name=y.Key, Total=y.Sum(z => decimal.Parse(z.OutstandingBalance)) });
var query = from e in _allDebtors.GroupBy(x => x.Company)
                                 .Select(y => new {
                                              Name = y.Key,
                                              Sum = y.Sum(z => decimal.Parse(z.OutstandingBalance))
                                  });
 var query = from e in _allDebtors.GroupBy(x => x.Company)
            .Select(y => new {Name = y.Key, TotalAmount = y
                                                 .Sum(z => 
                                                  decimal.Parse(z.OutstandingBalance))});