在我的应用程序上,我允许用户通过不同的提供者订购Food
个项目。
因此,Order
可以有OrderDetail
个项目,它们来自不同的 Providers 。
知道ProviderID
的情况下,如何仅检索具有至少1个指定ProviderID
的'OrderDetail'的 Orders 。
我想简化我的解决方案:
首先,我检索提供商的所有 FoodID
List<int> providersFoodIDs = db.Foods
.Where(f => f.Availability && f.ProviderID == providerID)
.Select(f => f.FoodID).ToList();
检索订单
List<Order> allPendingOrders = db.Orders
.Where(o => o.Status == Enums.OrderStatus.Pending.ToString())
.Include(o => o.OrderDetails)
.ToList();
订单副本:
List<Order> allPendingOrdersCopy = db.Orders.AsNoTracking()
.Where(o => o.Status == Enums.OrderStatus.Pending.ToString())
.Include(o => o.OrderDetails)
.ToList();
循环原始订单集合,如果OrderDetail
不是指定的Provider
,请从复印订单集合中删除OrderDetail
项目。
foreach (Order pendingOrder in allPendingOrders)
{
foreach (OrderDetail orderDetail in pendingOrder.OrderDetails)
{
if (orderDetail.FoodID != null && !providersFoodIDs.Contains((int)orderDetail.FoodID))
{
Order order = allPendingOrdersCopy.FirstOrDefault(o => o.OrderID == pendingOrder.OrderID);
OrderDetail odetail = order?.OrderDetails.FirstOrDefault(od => od.OrderDetailID == orderDetail.OrderDetailID);
order?.OrderDetails.Remove(odetail);
}
}
}
删除没有Order
的{{1}}:
OrderDetail
我想要一个更优雅的解决方案...
有什么想法吗?