5

私はここで非常によく似た質問をしました
エンティティフレームワーク-同じ列の複数の条件で選択-参照テーブル

今、関係は多対多です。つまり、order、items、orderItemの3つのテーブルがあります(itemsはジャンクションテーブルです)。ここでも、価格が100のorderItemと価格が200のorderItemが少なくとも1つあるすべての注文を選択します。

そのシナリオでこれを編集する方法が本当にわかりません。

var orders = from o in kontextdbs.orders
             select o;
foreach(int value in values)
{    
      int tmpValue = value;
      orders = orders.Where(x => kontextdbs.order_item.Where(oi => x.id == oi.order_id)
} 
4

3 に答える 3

1

まず、これを宣言することができます:

var orders = kontextdbs.orders;

実際のselectステートメントを使用する必要はありません。

実際の質問に答えるには、次のことができるはずです。

foreach(int value in values)
{
    var temp = value;

    orders = orders.Where(o => o.order_item.Any(oi => oi.price == temp));
}

orderこれは、からへのナビゲーションプロパティがあることを前提としていますorder_item

于 2012-04-21T18:21:21.050 に答える
1

これが修正版です

foreach(int value in values)
{    
      int tmpValue = value;
      orders = orders.Where(x => (from oi in kontextdbs.order_item
                                 join i in kontextdbs.items on oi.item_id equals i.id
                                 where x.id == oi.order_id
                                 select i).Any(y => y.price == tmpValue));    
}
于 2012-04-21T19:22:30.263 に答える
0

ナビゲーションプロパティがないため更新されました(修正する必要があります)。

価格が100または200の注文を選択する場合は、次を使用できます。

var qMyOrders = 
from a in kontextdbs.orders
join b in kontextdbs.order_items on a.id equals b.order_id
where values.Contains(b.price)
select a;

注文アイテムが配列内のすべての価格と一致する注文(たとえば、100と200)を検索する必要がある場合は、次を使用します。

var qMyOrders = 
from a in kontextdbs.orders
from b in kontextdbs.order_items.Where( c => c.order_id == a.id )
where values.All(d => b.price == d)
select a;
于 2012-04-21T18:27:34.357 に答える