2014-06-13 127 views
0

有人可以解釋如何有條件地從EF結果集中刪除對象嗎?循環中的條件記錄刪除

這裏是我的代碼

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q; 
if (newClubKitOrders.Any()) 
{ 
    foreach (NewClubKitOrder order in newClubKitOrders) 
    { 
     if (checkedStatus == true) 
     { 
      order.OrderDate = DateTime.Now; 
     } 
     else 
     { 
      //delete the row (order.delete()) 
     } 
    } 

    newClubKitOrders.SaveChanges(); 
} 

感謝

+0

http://stackoverflow.com/questions/17723626/entity-framework-remove-vs -deleteobject –

+0

有什麼問題?刪除方法,循環? –

回答

3

您無法刪除「foreach」循環中的「順序」。因此請嘗試「for」循環。

+0

這似乎不會導致在foreach()在VS中的任何警告,但不知道它是否實際上刪除:var success = newClubKitOrders.Remove(order); – Slinky

+0

@Slinky它會編譯,但是當你運行它時,它會抱怨枚舉已經改變。 – sab669

0

請嘗試下面的代碼,我已經在另一個列表中複製列表以確保安全。臨時名單只是遍歷,但實際成交發生最初的名單

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q; 

if (newClubKitOrders.Any()) 
{ 
    var TempnewClubKitOrders = newClubKitOrders.ToList(); 

    for(int i=0; i< TempnewClubKitOrders.Length; i++) 
    { 
     if (checkedStatus == true) 
     { 
      newClubKitOrders[i].OrderDate = DateTime.Now; 
     } 
     else 
     { 
      db.NewClubKitOrde.DeleteObject(newClubKitOrders[i]); 
     } 
    } 

    db.SaveChanges(); 
} 
+0

錯誤:「無法將索引應用於linq表達式..」我想我無法使用數組索引器 - 由於它被轉換爲列表 – Slinky

0

上這應該工作:

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q; 

if (newClubKitOrders.Any()) 
{ 
    foreach (NewClubKitOrder order in newClubKitOrders) 
    { 
     if (checkedStatus == true) 
     { 
      order.OrderDate = DateTime.Now; 
     } 
     else 
     { 
      db.NewClubKitOrders.Remove(order); 
     } 
    } 

    db.SaveChanges(); 
}