LINQ2SQL:如何通过从datagridview中检索实体来删除实体?

时间:2010-09-23 07:43:31

标签: c# linq-to-sql datagridview itemdatabound

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

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


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

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得到它而没有任何额外的select语句?我可以看到的一种方法是按ID删除自定义sproc。可能还有其他最好的方法吗?

1 个答案:

答案 0 :(得分:2)

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

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

另一个是使用L2S执行custom SQL statements

result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")