我有一个节点列表,每个节点都具有以下属性:

List
    node 1  {EquivalenceNo: 9, EquivalenceSing: -};
    node 2  {EquivalenceNo: 8, EquivalenceSing: -};
    node 3  {EquivalenceNo: 9, EquivalenceSing: +};
    node 4  {EquivalenceNo: 7, EquivalenceSing: +};
    node 4  {EquivalenceNo: 7, EquivalenceSing: +};


我只想选择具有相同EquivalenceNo和相反EquivalenceSing的节点,并获得另一个像这样的列表:

 List
        node 1  {EquivalenceNo: 9, EquivalenceSing: -};
        node 2  {EquivalenceNo: 9, EquivalenceSing: +};


我实现了此表达式,该表达式返回了所有出现的情况:

  listLeft.GroupBy(x => x.EquivalenceNo )
          .Where(g => g.Count() > 1)
          .SelectMany(y => y)
          .ToList()


但仅适用于仅出现一次的小型清单。但是由于我正在处理具有许多节点的长列表,因此与我需要做什么无关的事情将不止一次。

最佳答案

有了这个linq语句(我想,这是我对另一个问题的回答:)),您并没有过滤出具有不同符号的节点,而只用了一个以上相同编号的值来取所有节点。我建议对组中的标志进行计数,并且只接受具有1个以上标志的组。就像是:

var res = listLeft.GroupBy(x => x.EquivalenceNo)
                  .Where(g =>
                     g.Select(t=>t.EquivalenceSing).Distinct().Count()>1 )
                  .SelectMany(y => y)
                  .ToList();

关于c# - 在C#上按属性查找列表中的节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41211384/

10-17 01:55