2013-05-04 100 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); 
}