删除多个项目C#EF

时间:2016-03-27 19:12:01

标签: c# entity-framework foreach sql-delete

我正在使用实体框架。

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中使用了一个复选框,单击一个按钮。

3 个答案:

答案 0 :(得分:0)

我在猜测。在实际删除实体之前先尝试查找然后将它们放入单独的集合中,然后在单独的循环中将它们从DB中删除,然后在上下文中调用保存更改。我敢打赌,你可以修改你正在循环的集合。这会导致选择性删除问题。

答案 1 :(得分:0)

我相信你的问题就在于此:

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

您正在将过滤器中的ID与过滤器中的ID进行比较(始终为true)。我想你想要的东西:

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

...除了从您的行中检索您的ID的代码可能正是如此。 :)

答案 2 :(得分:0)

EntityFramework.Extended为这类工作提供了一个非常好的扩展方法。您可以找到更多详细信息here

文档页面中的示例:

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