2016-03-27 56 views
0

我正在使用實體框架。刪除倍數項目C#EF

try 
{ 
    List<DataGridViewRow> selectedRows = (from row in dtg.Rows.Cast<DataGridViewRow>() 
              where Convert.ToBoolean(row.Cells["Borrar"].Value) == true 
              select row).ToList(); 
    if (MessageBox.Show(string.Format("¿Deseas borrar {0} registros?", selectedRows.Count), "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.Yes) 
    { 
     foreach (DataGridViewRow row in selectedRows) 
     { 
      using (var context = new SistemaVentasEntities()) 
      { 
       REGISTROS registro= context.AUX_REGISTROS .Where(m => m.ID== m.ID).FirstOrDefault(); 
       context.REGISTROS.Remove(registro); 
       context.SaveChanges(); 
      } 
      this.CargarGrid(); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message + ex.StackTrace); 
} 

這裏,一切正常,消除了我選擇的記錄數。但只是連續的,我想刪除只選擇的項目,如果我有一個ID { 1,2,3,4 }的列表,我想刪除1和3,它不起作用,該代碼刪除1和2例如。

我在DataGridView中使用複選框,單擊按鈕。

+0

啊...這就是爲什麼我使用'PetaPoco'這些天... – code4life

回答

0

我在猜測。在實際刪除實體之前,先嚐試找到然後將它們放入單獨的集合中,然後在單獨的循環中從數據庫中移除它們,然後調用上下文的保存更改。我敢打賭,你是在修改你正在循環的集合。這導致你選擇刪除的問題。

+0

這是林試圖做...但我不能得到確定我想刪除的項目 –

0

我相信您的問題存在於該位:

.Where(m => m.ID== m.ID) 

您在過濾器與過濾器的ID(這將永遠是真實的)比較的ID。我想你想要的東西是這樣的:

.Where(m => m.ID == row.ID) 

...除了從你的行檢索你的ID代碼可能就是這樣。 :)

0

EntityFramework.Extended對這類工作有一個很好的擴展方法。你可以找到更多的細節here。從文檔頁面

例子:

//delete all users where FirstName matches 
context.Users 
    .Where(u => u.FirstName == "firstname") 
    .Delete();