【问题标题】:Giving error when using Linq query to delete multiple rows使用 Linq 查询删除多行时出错
【发布时间】:2016-02-18 09:14:51
【问题描述】:

这就是我试图在 linq mvc 4 中删除多行的内容。

int perm_id = (from c in db.tm_perm_level where c.perm_levelname == perm_name select c.perm_id).FirstOrDefault();
tblpermission objperm=(from c in db.tblpermission.Where (c.perm_id==perm_id) select c);

db.tblpermission.Remove(objperm);
int rowiseffected = db.SaveChanges();

在我出错的地方附近。这是表格中的数据

id  s.id   perm_id  read  write
3   1        1      True    True
4   2        1      True    True
23  1        2      True    False
24  1        2      True    False

这是我尝试过的 linq 代码

var objperm = (from c in db.ts_perm_levelmapping where (c.perm_id == perm_id) select c);
            foreach(var item in objperm)
            {
                db.ts_perm_levelmapping.Remove(item);
                int rowiseffected = db.SaveChanges();

            }

【问题讨论】:

  • 你遇到了什么错误?
  • system.data.entity.dbset(mvc1.tblpermiisiion)的最佳重载方法匹配.remove有一些无效参数
  • 你能告诉我哪里出错了吗?
  • .Remove() 采用单个对象(不是集合) - tblpermission objperm = db.tblpermission.Where(d=>d.perm_id==perm_id).FirstOrDefault();
  • 如果我想同时删除多个实体,我应该采用哪种方法?

标签: entity-framework linq asp.net-mvc-4


【解决方案1】:

我认为这是拼写错误。您正在使用两种类型的 linq 语法.. 用这个

  var objperm=(from c in db.tblpermission where (c.perm_id==perm_id) select c);

或者使用这个

  var objperm=db.tblpermission.Where(d=>d.perm_id==perm_id);

如果您使用的是EntityFramework 6

,则可以使用RemoveRange 删除所有对象
   db.tblpermission.RemoveRange(objperm);

如果没有,那么你可以使用迭代

喜欢

   foreach(var a in objperm)  
   {
    db.tblpermission.Remove(a);
   }

或其他选项将是EntityFramework.Extended

【讨论】:

  • 我现在在下面的行中尝试了上面我收到错误 db.tblpermission.Remove(objperm);
  • system.data.entity.dbset(mvc1.tblpermiisiion)的最佳重载方法匹配.remove有一些无效参数
  • 偶尔删除一次...迭代“objperm”并将其删除。
  • 是的,我认为登录相同,但如何在查询中迭代对象。我第一次这样做
  • 现在这个错误我在提供者连接上启动连接时出现错误。更新了我上面提到的代码。
猜你喜欢
  • 2016-05-18
  • 1970-01-01
  • 2013-11-11
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多