我有三节课: OrderSet-Order(1:n)和OrderDetail(1:n)
OrderSet和Order分别具有一个“状态”属性。
我希望接收一个包含状态为“ open”的所有OrderSet以及状态为“ open”的所有涉及Orders的构造。
我尝试过:
var orderSet = db.OrderSet
.Where(x => x.Status == 'Open')
.Where(x => x.Order.Any(y => y.Status == 'Open'))
.Include(x => x.Order.Select(q => q.OrderDetail))
但是我得到了所有订单,状态也为“已关闭”。
我怎么了?
谢谢。
答案 0 :(得分:1)
如果您要忽略包含任何OrderSet
没有“打开”状态的Order
,则可以使用:
var orderSets = db.OrderSet
.Where(os => os.Status == "Open" && os.Order.All(o => o.Status == "Open")
.Include(os => os.Order.Select(o => o.OrderDetail));
如果您想包括那些OrderSet
,而只忽略不满足上述条件的子Order
,那么不修改不返回的OrderSet集合就不可能做到这一点。查询。
如果这是您想要做的,实现此目的的一种方法是这样的:
var orderSets = db.OrderSet
.Where(os => os.Status == "Open")
.Include(os => os.Order.Select(o => o.OrderDetail)).ToList();
foreach (var orderSet in orderSets)
{
orderSet.Order.RemoveAll(o => o.Status == "Open");
}