实体框架中按属性对相关集合求和(延迟加载)



我需要一些实体框架查询方面的帮助。 我有以下实体:

public class Invoice
{
    public Guid Id { get; set; }
    public DateTime CreateDate { get; set; }
    [ForeignKey("CreatedById")]
    public virtual ApplicationUser CreatedBy { get; set; }
    public Guid CreatedById { get; set; }
    public bool Approved { get; set; }
    public virtual ICollection<InvoiceDetail> Details { get; set; }
}
public class InvoiceDetail
{
    public Guid Id { get; set; }
    [ForeignKey("InvoiceId")]
    public virtual Invoice Invoice { get; set; }
    public Guid InvoiceId { get; set; }
    public string Item { get; set; }
    public string Description { get; set; }
    public decimal Quantity { get; set; }
    public decimal UnitCost { get; set; }
    public decimal Discount { get; set; }
}

我正在尝试对发票已批准的所有项目的总数求和。 我遇到的问题是一旦我筛选出"已批准"= 1,就会进入"发票详细信息"级别:

var myInvoices = context.Invoices.Where(i => i.CreatedById == userId).Include(i => i.CreatedBy).Include(i => i.Details);
var approvedTotal = myInvoices.Where(i => i.Approved == 1).Select([GET TO DETAILS???]);
// my goal is to get the following sum for each detail for all of the approved invoices:
// ((d.Quantity * d.UnitCost) - d.Discount)

假设您想在执行给定计算后获得所有详细信息的总和,您可以执行以下操作:

var approvedTotal = invoices.Where(invoice => invoice.Approved)
            .Select(invoice => invoice.Details.Sum(detail => ((detail.Quantity * detail.UnitCost) - detail.Discount)));

因此,这为您提供了每张发票的总数。

最新更新