你如何将这些嵌套的foreach转换为linq

时间:2016-07-02 05:16:21

标签: c# linq foreach

以下是我使用嵌套foreach的查询:

foreach (Order order in xOrders)
{
    foreach (OrderItemDetail oid in order.OrderItemDetails)
    {
        db.Entry(oid).Reload();
    }

    foreach (Dispatch dispatch in order.Dispatches)
    {
        foreach (DispatchItemDetail did in dispatch.DispatchItemDetails)
        {
            db.Entry(did).Reload();
        }

        db.Entry(dispatch).Reload();
    }

    db.Entry(order).Reload();
}

现在,我想将其转换为纯linq,所以我至少更安全,因为Enumeration无法继续,因为Collection已更改。

我知道,如果有1个foreach,我可以将其转换为LINQ,如:

foreach查询:

foreach (Order order in xOrders)
{
    db.Entry(order).Reload();
}

LINQ查询:

xOrders.ToList().ForEach(x => db.Entry(x).Reload());

但我想知道你如何为嵌套的foreach做到这一点,如第一个代码块所示......

1 个答案:

答案 0 :(得分:3)

ForEach将委托作为参数。所以你可以编写静态方法或匿名函数。我正在用Anonymus方法写作。但是上面的方法是比使用ForEach()

更好的方法
 xOrders.ToList().ForEach((x) => {
     x.OrderItemDetails.ToList().ForEach(o => db.Entry(o).Reload());
     x.Dispatches.ToList().ForEach((D) => {
       D.DispatchItemDetails.ToList().ForEach(DI => db.Entry(DI).Reload());
       db.Entry(D).Reload();
     });
     db.Entry(x).Reload();
   });