5

我在这里问了非常相似的问题
Entity framework - select by multiple conditions in same column - referenced table

现在关系是多对多。所以我有 3 个表:order、items 和 orderItem(items 是一个 Junction 表)。我想选择至少一个 orderItem 价格为 100 和至少一个 orderItem 价格为 200 的所有订单

我真的不知道如何针对这种情况进行编辑。

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

这是修改后的版本

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 回答
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));
}

这假设您有一个导航属性 from orderto order_item

于 2012-04-21T18:21:21.050 回答
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 回答