Вам просто нужно GroupBy
соответственно:
var groups = eqList.GroupBy(n => n.RootID).Where(g => g.Count() >= 3);
foreach (var g in groups) {
Console.Out.WriteLine("There are {0} nodes which share RootId = {1}",
g.Count(), g.Key);
foreach (var node in g) {
Console.Out.WriteLine(" node id = " + node.ID);
}
}
Посмотреть в действии .
Дополнительная информация :
В приведенном выше коде g
- это IGrouping<int?, TeleDBData>
, поэтому, согласно определению на странице документации, это набор TeleDBData
элементов, имеющих общий ключ (то есть int?
). groups
- это IEnumerable<IGrouping<int?, TeleDBData>>
, все это стандартная процедура для Enumerable.GroupBy
метода.
Две вещи, которые вы хотели бы сделать с IGrouping<,>
, - это получить доступ к свойству Key
, чтобы найти ключ и перечислить его для обработки сгруппированных элементов. Мы делаем это в приведенном выше коде.
Что касается n
в GroupBy
лямбде, то он просто представляет каждый из элементов в eqList
по очереди; Отсюда следует, что его тип TeleDBData
. Я выбрал n
в качестве имени параметра как сокращение от "узла".