You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:57:00