【发布时间】:2022-01-03 07:40:34
【问题描述】:
public async Task<IHttpActionResult> DeleteUser(string id)
{
try {
using (hospiceEntities db = new hospiceEntities())
{
Guid guid_id = Guid.Parse(id);
var q =
(from user in db.Users
join resource in db.Resources
on user.Id equals resource.UserId
where user.Id == guid_id
select user).Single<User>();
foreach (Resource res in q.Resources)
{
db.Resources.Remove(res);
}
db.Users.Remove(q);
await db.SaveChangesAsync();
return Ok(Helper.SuccessResponse("User Deleted"));
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
我有两个表 Users 和 Resource 通过外键约束连接。我已经编写了上面的 LINQ 查询来删除记录,但它没有删除它。请告诉我我做错了什么。谢谢
【问题讨论】:
-
你有什么异常吗?
-
你调试过你的代码吗?您是否检查过
q或q.Resources中是否有任何价值? -
我得到的异常是" "Message": "Collection was modified;枚举操作可能无法执行。” status 400 badrequest
-
在 q.Resources 中,我正在获取两个表的所有数据。它在 foreach 循环之前工作正常,但在移出循环后它不会执行下一条语句而是跳转到 catch 块。
-
如果您尝试使用
ToList,例如foreach (Resource res in q.Resources.ToList()),怎么样?
标签: c# linq asp.net-web-api cascade http-delete