我有一个节点列表,每个节点都具有以下属性:
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/