删除交叉口记录;不起作用

本文关键字:不起作用 记录 交叉口 删除 | 更新日期: 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());