从条件父ID和子ID linq C#的列表中删除

Posted

技术标签:

【中文标题】从条件父ID和子ID linq C#的列表中删除【英文标题】:Delete from list on condition parent id and child id linq C# 【发布时间】:2021-10-21 06:56:07 【问题描述】:

  "companies":[
    
      "CID":"1",
      "branches":[
        
          "BID":"1",
          "stores":[
            
              "SID":"2",
              "departments":[
                
                  "DID":2
                ,
                
                  "DID":3
                
              ]
            
          ]
        
      ]
    ,
    
      "CID":"2",
      "branches":[
        
          "BID":"1",
          "stores":[
            
              "SID":"2",
              "departments":[
                
                  "DID":2
                ,
                
                  "DID":3
                
              ]
            
          ]
        
      ]
    
  ]

我想从 CID=2 和 BID=1 和 SID=2 的列表中删除数据。根据这三个条件数据应该被删除

userEnitityDetails.companies
    .RemoveAll(C => C.branches
        .Any(B => B.stores
            .Any(S=> S.SID.Equals(InputStoreName))));

【问题讨论】:

恕我直言,您最好在之前和之后显示您想要的结果 【参考方案1】:

您的代码不测试除 SID 之外的 ID。

我猜你想这样做?

            Companies
            .RemoveAll(c => c.CID == 2 && c.Branchs
                .Any(b => b.BID == 1 && b.Stores
                    .Any(s => s.SID == 2)));

【讨论】:

没有给出错误 System.NullReferenceException: 'Object reference not set to an instance of an object.'【参考方案2】:

如果companies 对象或嵌套对象可能为空,则使用:

companies?.RemoveAll(c => 
    c.CId == 2 && (c.Branches?.Any(b => 
        b.BId == 1 && (b.Stores?.Any(s => s.SId == 2)??false))??false));

【讨论】:

以上是关于从条件父ID和子ID linq C#的列表中删除的主要内容,如果未能解决你的问题,请参考以下文章

使用 linq 和 c# 的最大父 ID 的子节点数

oracle中建父表和子表的语句是啥?

在 c# 中使用 linq 按钮无法从 json 中正确计算章节 ID

使用 Linq 从列表中删除与属性相交的项目

c#在遍历列表时删除元素-向后迭代或使用i--或使用linq同时迭代和删除?

Linq + Reflection通过字段名称和条件从列表中获取元素