实体框架 - 由同一列中的多个条件选择 - 多对多

时间:2012-04-21 18:15:18

标签: c# entity-framework select linq-to-entities many-to-many

我在这里问了非常相似的问题 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)
} 

3 个答案:

答案 0 :(得分: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));    
}

答案 1 :(得分:0)

首先,您可以声明:

var orders = kontextdbs.orders;

无需使用实际的选择语句。

要回答您的实际问题,您应该可以这样做:

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

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

这假设您拥有从orderorder_item的导航属性。

答案 2 :(得分: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;