6

(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

4

2 に答える 2