(不确定我是否需要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
根据你的描述我会写:
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 是什么?