我在这里问了非常相似的问题 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)
}
答案 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));
}
这假设您拥有从order
到order_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;