LINQ Sum与GroupBy

use*_*119 6 c# linq

(不确定我是否需要GroupBy)

我的(简化)表格:

Products(ProductID,Name,Code)
Invoices(InvoiceID,Number,IsPaid)
Invoices_Products(InvoiceID,ProductID,Quantity,Price) - 多对多链接表

我需要显示按产品代码分组的付款发票的发票_产品列表(数量*价格).

我首先用来获取可以绑定到UI的集合的代码:

IEnumerable<Invoices_Products> invoices_products = db.Invoices_Products
.Where(ip => ip.Invoice.IsPaid).DistinctBy(m => m.Product.Code);
Run Code Online (Sandbox Code Playgroud)

然后我遍历这个以将其绑定到UI:

List<BindableInvoiceProduct> bindableInvoiceProducts = 
new List<BindableInvoiceProduct>();

foreach (var item in invoices_products)
{
    decimal salesValue = db.Invoices_Products.Where(ip => ip.Invoice.IsPaid 
    && ip.Product.Code == item.Product.Code).Sum(m => (m.Price * m.Quantity));

    bindableInvoiceProducts.Add(new BindableInvoiceProduct()
    {
        A = item.A,
        B = item.B,
        SalesValue = salesValue.ToString()
    });
}
Run Code Online (Sandbox Code Playgroud)

(DistinctBy方法来自morelinq)

为什么这不完全正确?

编辑:

一些数据:

Product - ProductID = 1,Name = 123,Code = A
Product - ProductID = 2,Name = 456,Code = A
Invoice - InvoiceID = 1,Number = INV123,IsPaid = True
Invoices_Products - InvoiceID = 1,ProductID = 1,Quantity = 10,价格= 100
Invoices_Products - InvoiceID = 1,ProductID = 2,Quantity = 10,Price = 200

预期结果:

Code = A,SalesValue = 3000

Tho*_* B. 0

根据你的描述我会写:

var bindableInvoiceProducts = db.Invoices_Products
    .Where(ip => ip.Invoice.IsPaid)
    .GroupBy(ip => ip.Product.Code, 
             (code, ips) => new BindableInvoiceProduct()
                {
                    Code = code,
                    SalesValue = ips.Sum(ip => (ip.Price*ip.Quantity))
                })
    .ToList();
Run Code Online (Sandbox Code Playgroud)

这就是你所需要的吗?您的代码中的 item.A 和 item.B 是什么?