1

我有一个 datagridview 和附加的员工列表,如下所示:

IQueryable<Employee> data = (from em in db.Employees
                             where em.StationID == stationID
                             select em);
dgvView.DataSource = data;


现在我想通过 datagridview 中的选定行删除特定的员工:

using (PetrolNetwork db = new PetrolNetwork())
                {
                    Employee empl = (Employee)dgvView.CurrentRow.DataBoundItem;
                    db.Employees.DeleteOnSubmit(empl);
                    db.SubmitChanges();
                }

毫不奇怪,我有异常“无法删除尚未附加的实体。
当我将此代码替换为:

Employee employee = (from em in db.Employees
                                         where em.ID == empl.ID
                                         select em).Single();
                    db.Employees.DeleteOnSubmit(employee);
                    db.SubmitChanges(); 

一切正常,在 sqlprofiler 中,我们可以看到一个额外的数据库选择来检索我们的特定员工,然后从语句中删除。
当我从 datagridview 的 DataBoundItem 得到它时,我如何删除我的员工,而没有任何额外的选择语句?我可以看到的一种方法是通过 ID 删除自定义存储过程。可能还有其他最好的方法吗?

4

1 回答 1

2

不幸的是,使用 LinqToSql,您需要在删除之前选择要删除的项目。

使用您提到的存储过程是一种选择。

另一种是使用 L2S 执行自定义 SQL 语句

result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")
于 2010-09-23T08:21:11.977 回答