(GroupByが必要かどうかはわかりません)
私の(簡略化された)テーブル:
Products
(ProductID, Name, Code)
Invoices
(InvoiceID, Number, IsPaid)
Invoices_Products
(InvoiceID, ProductID, Quantity, Price) - 多対多のリンク テーブル
合計 (数量 * 価格) の製品コードでグループ化された支払済み請求書の Invoices_Products のリストを表示する必要があります。
UI にバインドできるコレクションを取得するために最初に使用するコードは次のとおりです。
IEnumerable<Invoices_Products> invoices_products = db.Invoices_Products
.Where(ip => ip.Invoice.IsPaid).DistinctBy(m => m.Product.Code);
次に、これを反復処理して 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()
});
}
(DistinctBy
メソッドは morelinq から)
これが正しく合計されないのはなぜですか?
編集:
いくつかのデータ:
製品 - 製品 ID = 1、名前 = 123、コード =
製品 - 製品 ID = 2、名前 = 456、コード = A
請求書 - InvoiceID = 1、番号 = INV123、IsPaid = True
Invoices_Products - InvoiceID = 1、製品 ID = 1、数量= 10、価格 = 100
Invoices_Products - InvoiceID = 1、ProductID = 2、数量 = 10、価格 = 200
期待される結果:
コード = A、SalesValue = 3000