我在两个表之间有一个交集表(这是一个简化的方案,但仍然有效)。
Answer -< AnswerTopic >- Topic
我希望删除特定答案的交叉记录,因此使用以下代码...
answer.AnswerTopics.ToList().RemoveAll(at => at.AnswerID == answer.AnswerID);
...但发现AnswerTopics中的相关行根本不会消失。它不会引发错误,只是留在那里。我通过使用...来解决问题。
foreach (AnswerTopic answerTopic in answer.AnswerTopics.ToList())
answer.AnswerTopics.Remove(answerTopic);
尽管如此,这已经让我疯了,我已经尝试了十几种不同的写作方式而且找不到问题(我可能已经看了太久了!)。有人可以建议为什么第一种语法不会删除记录。
答案 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());