基于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
相关产品推荐
相关产品推荐

