如何使用linq查询从数据库中删除单行?

时间:2016-02-03 09:06:43

标签: c# entity-framework linq

这是我的表ts_grp_perm_mapping

grp_permid     grp_id      perm_id
22              4           1
23              2           2

这是我删除行的代码。 上面usr_groupId位于上表grp_id。 下面的usr_doctypeids在上表中为perm_id

public int saveNewUser(int usr_groupId, int usr_doctypeids)
{
     ts_grp_perm_mapping tm = db.ts_grp_perm_mapping.Find(usr_groupId);
     db.ts_grp_perm_mapping.Remove(tm);
     int rowiseffected=db.SaveChanges();
     return rowiseffected;
}

当我追踪我的tm时显示为null,并且弹出错误,因为值不能为空。那么我哪里出错?

3 个答案:

答案 0 :(得分:1)

Find仅适用于主键。 使用Linq SingleSingleOrDefault获取其他属性。

public int saveNewUser(int usr_groupId, int usr_doctypeids)
{
     ts_grp_perm_mapping tm = db.ts_grp_perm_mapping.SingleOrDefault(ts => ts.grp_id == usr_groupId);
     if(tm == null)
         throw new Exception($"The grp_id {usr_groupId} was not found");
     db.ts_grp_perm_mapping.Remove(tm);
     int rowiseffected=db.SaveChanges();
     return rowiseffected;
}

如果可能,请使用您的方法async并使用

ts_grp_perm_mapping tm = await db.ts_grp_perm_mapping.SingleOrDefaultAsync(ts => ts.grp_id == usr_groupId).ConfigureAwait(false);
//...
int rowiseffected = await db.SaveChangesAsync().ConfigureAwait(false);

答案 1 :(得分:1)

如果grp_id是主键

 public int saveNewUser(int usr_groupId, int usr_doctypeids)
    {
         ts_grp_perm_mapping tm = db.ts_grp_perm_mapping.SingleOrDefault(ts => ts.grp_id == usr_groupId);
         if(tm != null)
             {
         db.ts_grp_perm_mapping.Remove(tm);
         int rowiseffected=db.SaveChanges();
         return rowiseffected;
    }
    else
    {
    return 0;
    }
    }

如果grp_id不是主键

public int saveNewUser(int usr_groupId, int usr_doctypeids)
        {
             ts_grp_perm_mapping tm = db.ts_grp_perm_mapping.FirstOrDefault(ts => ts.grp_id == usr_groupId);
             if(tm != null)
                 {
             db.ts_grp_perm_mapping.Remove(tm);
             int rowiseffected=db.SaveChanges();
             return rowiseffected;
        }
        else
        {
        return 0;
        }
        }

答案 2 :(得分:-1)

尝试

        public int saveNewUser(int usr_groupId, int usr_doctypeids) 
    { 
      var tm = db.ts_grp_perm_mapping.Where(a => a.grp_id == usr_groupId); 
      db.ts_grp_perm_mapping.Remove(tm); 
      int rowiseffected=db.SaveChanges();
      return rowiseffected;
    }