Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不分组主列表数据的情况下计算特定属性的总和_C#_Linq_Group By_Sum - Fatal编程技术网

C# 如何在不分组主列表数据的情况下计算特定属性的总和

C# 如何在不分组主列表数据的情况下计算特定属性的总和,c#,linq,group-by,sum,C#,Linq,Group By,Sum,我正在从数据库中获取发票,我希望返回所有发票,而不将其分组 我不想将它们分组,因为如果有100张发票,考虑到我想得到金额的总和,我想全部退回100张 因此,如果多张发票的金额相同,重复相同的总额是完全可以的,因此基本上我只想在可能的情况下,按CompanyId、PackageId、BankId、PayMethod计算每个发票项目和组的金额之和 --阅读代码注释-- Invoice类如下所示: public class DemoDto { public string CompanyId {ge

我正在从数据库中获取发票,我希望返回所有发票,而不将其分组

我不想将它们分组,因为如果有100张发票,考虑到我想得到金额的总和,我想全部退回100张

因此,如果多张发票的金额相同,重复相同的总额是完全可以的,因此基本上我只想在可能的情况下,按CompanyId、PackageId、BankId、PayMethod计算每个发票项目和组的金额之和

--阅读代码注释--

Invoice类如下所示:

public class DemoDto
{
  public string CompanyId {get;set;}
  public string Title {get;set;}
  public decimal Price {get;set;}
  public decimal Amount {get;set;}
}
public class Invoice
{
    public string CompanyId { get; set; }
    public int PackageId {get; set;}
    public int BankId {get;set;}
    public int PayMethod {get;set;}
    public string Title { get; set; }
    public decimal Price { get; set; }
    public decimal Amount { get; set; }
}
我错过了什么

我怎样才能做到这一点

谢谢各位 干杯

  • 从数据库中获取所有发票:

    var invoices = await _dbContext.Invoices
                     .Where(p => p.CheckDate >= startDate && p.CheckDate <= endDate)
                     .ToListAsync();
    

  • 如果出于某种原因希望在数据库中执行分组,则应该执行原始SQL查询或存储过程,而不是依赖ORM生成一些神奇的结果(很可能效率低下)为您查询。

    此对账单是如何存在的?我不想将它们与此一起存在。我想计算每个发票项目的金额总和,并按公司ID、PackageId、BankId、,PayMethod?没有理由在每个实体中存储您可以分组的所有实体的总和,并在分组后通过计算总列的总和来获取相同的列表。类似这种方法:
    productPrices.GroupBy(p=>p.ProductId)。SelectMany(x=>x.Select(y=>newproductprices){ProductId=y.ProductId,VendorId=y.VendorId,Price=y.Price,Total=x.Sum(z=>z.Price)})
    @Sajid您能在我的代码中应用您的解决方案吗?我想知道如何修改我的代码以应用您编写的代码?非常感谢Sajid!@Roxy'Pro,我可以应用它,所以对于您的案例,我们将按公司ID、PackageId、银行ID、付款方式分组?
    var invoices = await _dbContext.Invoices
                     .Where(p => p.CheckDate >= startDate && p.CheckDate <= endDate)
                     .ToListAsync();
    
    var result = invoices?
                     .GroupBy(p => new { p.CompanyId, p.PackageId, p.BankId, p.PayMethod })
                     .SelectMany(x => x.Select(y =>
                         new DemoDto
                         {
                             CompanyId = y.CompanyId,
                             Title = y.Title,
                             Price = y.Price,
                             Total = x.Sum(z => z.Price)
                         }))
                     .ToList();