我有一个节点列表,每个节点都有这个属性:
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()
但仅适用于只有一次出现的小号列表。但是,由于我处理的是具有大量节点的长列表,并且不会出现与我需要做的事情不同的事件。
答案 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();