2016-03-27 81 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();