删除交叉口记录;不起作用
本文关键字:不起作用 记录 交叉口 删除 | 更新日期: 2023-09-27 17:57:42
我在两个表之间有一个交集表(这是一个简化的场景,但仍然有效)。
Answer -< AnswerTopic >- Topic
我希望删除特定答案的交集记录,所以使用了以下代码。。。
answer.AnswerTopics.ToList().RemoveAll(at => at.AnswerID == answer.AnswerID);
但发现AnswerTopics中的相关行根本不会消失。这不会引起错误,他们只是停留在那里。我用…解决了这个问题。。。
foreach (AnswerTopic answerTopic in answer.AnswerTopics.ToList())
answer.AnswerTopics.Remove(answerTopic);
尽管如此,这一直让我抓狂,我尝试了十几种不同的写作方式,但都找不到问题所在(我可能看得太久了!)。有人能提出为什么第一个语法没有删除记录吗。
这里的问题是通过调用ToList
创建新的List
,并在运行逻辑后将其丢弃。
也许你需要的是
var list = answer.AnswerTopics.ToList();
list.RemoveAll(at => at.AnswerID == answer.AnswerID);
answer.AnswerTopics = list;
可能您有AnswerTopics集,通常如果您得到一个答案的Answertopic,则不需要通过AnswerID对其进行筛选,假设AnserID是answer的主键,并且是answer Topic中answer的外键。然后你可以使用:
context.AnswerTopics.RemoveRange(
answer.AnswerTopics.AsEnumerable());