【问题标题】:Delete multiples items C# EF删除多个项目 C# EF
【发布时间】:2016-03-27 19:12:00
【问题描述】:

我正在使用实体框架。

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

【问题讨论】:

  • 呃...这就是我这些天使用PetaPoco的原因...

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


【解决方案1】:

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

【讨论】:

  • 这是我想要做的......但我无法识别我想要删除的项目
【解决方案2】:

我相信您的问题在于这一点:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    来自文档页面的示例:

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

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多