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

基于CID、BID、SID条件使用C# LINQ删除嵌套列表数据

用LINQ实现嵌套列表的多条件删除(C#)

嘿,我来帮你搞定这个问题!你当前的代码只检查了门店的SID条件,没结合CID和BID的筛选,所以得把三个条件都整合到判断逻辑里。根据你要删除的层级不同,这里有两种常见的实现方式:

1. 删除指定公司+分支下的目标门店

如果你的目标是删掉CID=2的公司里,BID=1的分支下SID=2的门店,可以这么写:

// 先定位到目标公司,再找到对应分支,最后删除门店
var targetCompany = userEnitityDetails.companies.FirstOrDefault(c => c.CID == "2");
if (targetCompany != null)
{
    var targetBranch = targetCompany.branches.FirstOrDefault(b => b.BID == "1");
    if (targetBranch != null)
    {
        targetBranch.stores.RemoveAll(s => s.SID == "2");
    }
}

或者用更简洁的链式LINQ操作:

userEnitityDetails.companies
    .Where(c => c.CID == "2")
    .SelectMany(c => c.branches.Where(b => b.BID == "1"))
    .ToList()
    .ForEach(branch => branch.stores.RemoveAll(store => store.SID == "2"));

2. 删除满足所有条件的整个公司

如果你是想删掉所有符合“CID=2,且包含BID=1的分支,且该分支有SID=2的门店”的公司,那调整RemoveAll的条件就行:

userEnitityDetails.companies.RemoveAll(company => 
    company.CID == "2" && 
    company.branches.Any(branch => 
        branch.BID == "1" && 
        branch.stores.Any(store => store.SID == "2")
    )
);

小提示

  • 注意你的数据里ID都是字符串类型(比如"CID":"1"),所以判断时要用字符串相等(== "2"),如果是数值类型就去掉引号哈。
  • SelectMany的作用是把嵌套的分支列表扁平化,方便我们直接操作符合条件的分支。
  • 用ToList().ForEach()是因为LINQ是延迟执行的,得先把结果转成列表才能执行后续的删除操作。

内容的提问来源于stack exchange,提问作者radha singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:27:36