删除交集记录不起作用

时间:2016-07-20 06:18:05

标签: c# entity-framework linq

我在两个表之间有一个交集表(这是一个简化的方案,但仍然有效)。

Answer -< AnswerTopic >- Topic

我希望删除特定答案的交叉记录,因此使用以下代码...

answer.AnswerTopics.ToList().RemoveAll(at => at.AnswerID == answer.AnswerID);

...但发现AnswerTopics中的相关行根本不会消失。它不会引发错误,只是留在那里。我通过使用...来解决问题。

foreach (AnswerTopic answerTopic in answer.AnswerTopics.ToList())
    answer.AnswerTopics.Remove(answerTopic);

尽管如此,这已经让我疯了,我已经尝试了十几种不同的写作方式而且找不到问题(我可能已经看了太久了!)。有人可以建议为什么第一种语法不会删除记录。

2 个答案:

答案 0 :(得分:1)

问题在于,您是通过调用List创建新的ToList并在运行逻辑后将其丢弃。

可能你需要的是

var list = answer.AnswerTopics.ToList();
list.RemoveAll(at => at.AnswerID == answer.AnswerID); 
answer.AnswerTopics =  list; 

答案 1 :(得分:0)

可能你有AnswerTopics Set,通常如果你得到一个回答 AnswerTopics ,就不需要通过 AnswerID 来过滤它们假设AnserID是 Answer 的主键,来自AnswerTopics的外键。然后你可以使用:

context.AnswerTopics.RemoveRange(
      answer.AnswerTopics.AsEnumerable());