按C#上的属性查找列表中的节点

时间:2016-12-18 18:13:15

标签: c# linq

我有一个节点列表,每个节点都有这个属性:

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() 

但仅适用于只有一次出现的小号列表。但是,由于我处理的是具有大量节点的长列表,并且不会出现与我需要做的事情不同的事件。

1 个答案:

答案 0 :(得分:3)

使用这个linq语句(我想,这是我对你的另一个问题的回答:))你没有过滤掉具有不同标志的节点,你只需要使用多个相同数字的多个节点。我建议计算小组中的标志,并且只采用超过1个标志的小组。类似的东西:

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