2010-09-23 65 views
1

我有一個DataGridView和IT僱員的名單附後,財產以後這樣的:
LINQ2SQL:如何通過從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刪除的自定義sproc。可能還有其他最好的方法嗎?

回答

2

對於LinqToSql來說,不幸的是,在刪除它之前,您需要選擇要刪除的項目。

如上所述使用存儲過程是一種選擇。

另一個是使用L2S來執行custom SQL statements

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