C# 如何在不分组主列表数据的情况下计算特定属性的总和
我正在从数据库中获取发票,我希望返回所有发票,而不将其分组 我不想将它们分组,因为如果有100张发票,考虑到我想得到金额的总和,我想全部退回100张 因此,如果多张发票的金额相同,重复相同的总额是完全可以的,因此基本上我只想在可能的情况下,按CompanyId、PackageId、BankId、PayMethod计算每个发票项目和组的金额之和 --阅读代码注释-- Invoice类如下所示: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
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();