使用linq

时间:2019-03-20 09:05:47

标签: linq asp.net-mvc-5 entity-framework-6

在我的应用程序上,我允许用户通过不同的提供者订购Food个项目。 因此,Order可以有OrderDetail个项目,它们来自不同的 Providers

知道ProviderID的情况下,如何仅检索具有至少1个指定ProviderID的'OrderDetail'的 Orders

我想简化我的解决方案:

  1. 首先,我检索提供商的所有 FoodID

    List<int> providersFoodIDs = db.Foods .Where(f => f.Availability && f.ProviderID == providerID) .Select(f => f.FoodID).ToList();

  2. 检索订单

    List<Order> allPendingOrders = db.Orders .Where(o => o.Status == Enums.OrderStatus.Pending.ToString()) .Include(o => o.OrderDetails) .ToList();

  3. 订单副本:

    List<Order> allPendingOrdersCopy = db.Orders.AsNoTracking() .Where(o => o.Status == Enums.OrderStatus.Pending.ToString()) .Include(o => o.OrderDetails) .ToList();

  4. 循环原始订单集合,如果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); } }
    }

  5. 删除没有Order的{​​{1}}:

    OrderDetail

我想要一个更优雅的解决方案...

有什么想法吗?

0 个答案:

没有答案