2016-07-02 3 views
0

にこれらのネストされたforeachのは、ネストしたforeachのと私のクエリで変換するにはどうすればよい:あなたはここでLINQ

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にそれを変換したいので、私は、そのような列挙ができないなどのエラーのためのより安全な少なくとも午前コレクションが変更されたために続行します。

私は1つのforeachがある場合、私はLINQのように変換することができ、知っている:

foreachのクエリ:

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

LINQクエリ:

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

しかし、私は方法を知りたいです最初のコードブロックに示されているように、ネストされたforeachに対してこれを行うことができます。

+2

を使用するよりも最良の方法です。 Linqは、データを変更するのではなく、データを照会するためのものです。 –

+0

申し訳ありませんが、私はそのコンセプトを誤解しました。しかし、このケースでForEachを使うにはどうすればいいですか? – Vishal

+2

なぜあなたはあなたがそれを持っていたか、あるいはよりはっきりとしていますか。また、LINQのバージョンは、 '.ToList()'呼び出しによって消費された余分なメモリのために遅くなります。 –

答えて

3

ForEachは、パラメータとして食べました。したがって、静的メソッドまたは無名関数を記述できます。私はAnonymusメソッドで書いています。しかし、あなたが上記のやり方は、foreachの() `LINQ`、` ForEach`は `一覧 `上の方法ではない `ToList`以外

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(); 
    }); 
+1

ありがとう、それは正常に動作します。あなたのコードは私にエラーを与えました、そして、私はそれを変更し、あなたの答えを更新しました。私の質問にお答えいただきありがとうございます。 – Vishal

+2

これは混乱のように見えますが、パフォーマンスが低下し、メモリ使用量が増加します。なぜ誰かがこのようなコードをしたいのか分からない。 – hazevich

+1

はい、@hazevichあなたは正しいです。これはパフォーマンスを低下させます。しかし、私は学習目的のために答えを出すだけです。私はそれが正しい方法ではないとも言いました。 –

関連する問題