1

1対多の関係を持つ2つのテーブルがあります。

1つの注文には多くの製品があります。

それぞれに無料の製品が含まれている注文のリストを取得したいと思います(注文ごとに1つ)。

私はこのようなことを試しました:

this.ObjectContext.ORDERS.Include("PRODUCTS").Where(e=>e.PRODUCTS.price == 0).OrderBy(e => e.Order);

しかし、これは機能していません。

他にアプローチはありますか?

前もって感謝します。

4

1 に答える 1

3

PRODUCTSがコレクションの場合、拡張Any()メソッドを使用して、製品が無料かどうかを確認できます(または、All()すべての製品が無料かどうかを確認する方法)。

this.ObjectContext.ORDERS
                  .Include("PRODUCTS")
                  .Where(o => o.PRODUCTS.Any(p => p.price == 0))
                  .OrderBy(e => e.Order);

目的の出力(オプションの無料製品を含むすべての注文)の明確化に基づいて、次のクエリを使用できます。

this.ObjectContext.ORDERS
                  .Include("PRODUCTS")
                  .Select(o => new {
                      Order = o, 
                      FreeProduct = o.PRODUCTS.FirstOrDefault(p => p.price == 0)
                  });

注文と無料の商品を含む匿名タイプのシーケンスを返します(無料の商品が存在しない場合はnull)。

于 2012-10-24T13:09:59.807 に答える