2013-05-04 77 views
2

我從數據庫中選擇一個ID,然後我想刪除行與此ID:如何在linq中刪除?

var ado = new mydbEntities(); 
var selItem = listView3.SelectedItems[0]; 

if (selItem != null) 
{ 
    var selId = (from t in ado.task 
       where t.t_name == selItem.Text 
       select new { t.id}); 

    ado.task.DeleteOnSubmit(selId); //this command return error 
} 

我試圖與DeleteOnSubmit刪除,但我得到的錯誤。 如何從數據庫中刪除行?

+0

你試過'var selId =(bla).ToArray()'?雖然,不知道你得到哪個錯誤,我只能猜測你的問題是什麼。 – Nolonar 2013-05-04 18:48:14

+0

給我這個錯誤: 'System.Data.Objects.ObjectSet '不包含'DeleteOnSubmit'的定義,也沒有擴展方法' – Patrik18 2013-05-04 19:02:04

回答

1

編輯:既然你似乎有ObjectSet來工作,你需要使用DeleteObject();

var sel = (from t in ado.task 
      where t.t_name == selItem.Text 
      select t).FirstOrDefault(); 

if(sel != null) 
    ado.task.DeleteObject(sel); 

DeleteOnSubmit()需要一個實體作爲參數,而不是一個匿名類型。這應該會更好;

var sel = (from t in ado.task 
      where t.t_name == selItem.Text 
      select t).FirstOrDefault(); 

if(sel != null) 
    ado.task.DeleteOnSubmit(sel); 

如果你想刪除多個實體,使用DeleteAllOnSubmit()這需要實體的枚舉;

var sel = from t in ado.task 
      where t.t_name == selItem.Text 
      select t; 

ado.task.DeleteAllOnSubmit(sel); 
+0

我仍然得到這個錯誤:''System.Data.Objects。 ObjectSet '沒有包含'DeleteOnSubmit'的定義,也沒有擴展方法' – Patrik18 2013-05-04 18:57:44

+0

@ user1726810請參閱我的編輯。 – 2013-05-04 19:01:58

+0

是的,我試過DeleteObject(),這個運行沒有錯誤,但沒有發生。行仍然在分貝。 – Patrik18 2013-05-04 19:09:38

0
var ado = new mydbEntities(); 
var selItem = listView3.SelectedItems[0]; 

if (selItem != null) 
{ 
    var tasksToDelete = from t in ado.task 
         where t.t_name == selItem.Text 
         select t; 

    ado.task.DeleteOnSubmit(tasksToDelete); 
}