C#使用Where与Any过滤子列表时无法删除指定子项问题求助
问题根因
你写的Linq逻辑存在两处核心错误:
- 外层
Where是用来过滤TemplateNote父级对象的,不会修改父级对象内部的Conditions子集合:只要父级对象满足Content == "AA"且Conditions里存在至少1条不需要删除的项,整个父级对象(包括它所有的Conditions子项)都会被完整保留,所以DD注释会跟着父级一起留存。 Any(v => v.Target != removeAgentDisease)的作用仅为判断「父级有没有不需要删除的子项」,完全没有起到过滤子集合的作用。
修复方案
你需要先筛选符合要求的父级对象,再对每个父级的Conditions子集合单独做过滤,参考代码如下:
TemplateNote = TemplateNote // 第一步:过滤符合要求的父级对象 .Where(x => x.Content == "AA") // 第二步:对每个父级的Conditions子集合做过滤,重新生成父级对象 .Select(x => new TemplateNote() { Content = x.Content, // 仅保留不需要删除的子项 Conditions = x.Conditions.Where(v => v.Target != removeAgentDisease).ToList() // 如果你TemplateNote类还有其他字段,在这里补充赋值即可 }) .ToList();
如果你不想创建新的TemplateNote对象,也可以通过遍历修改原对象的子集合:
// 先筛选要保留的父级 TemplateNote = TemplateNote.Where(x => x.Content == "AA").ToList(); // 遍历每个父级,移除不需要的子项 foreach (var note in TemplateNote) { note.Conditions = note.Conditions.Where(v => v.Target != removeAgentDisease).ToList(); }
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

