Пример кода, представленного ниже, работает нормально, он делает то, что должен делать, но я не удовлетворен. Ищете гораздо более разумное решение в VB.NET. Представление результатов (я имею в виду подсчет для каждой подгруппы) довольно неловко. Содержание данных, список записей и т. Д. Не важны. Кроме того, отсчеты должны быть отсортированы в порядке Меньше {0}, От {1} до {2}, Больше, чем {3} ... Заранее спасибо.
Dim Age1 As Integer = 5
Dim Age2 As Integer = 9
Dim myList As New List(Of Integer) = {1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 2, 4, 5, 7, 8, 9, 6, 7, 9, 11}
Dim Lambda = myList.GroupBy(Function(x) New With {Key .Age1 = (x) < Age1,Key .Age2 = (x) > Age1 - 1 And (x) <= Age2,Key .Age3 = (x) > Age2}).ToList()
Dim group1, group2, group3 As Integer
myList = myList.OrderBy(Function(x) x).ToList()
Console.WriteLine(String.Join(",", myList.Select(Function(s) s.ToString).ToArray))
For Each group In Lambda
If group.Key.Age1 Then group1 = group.Count()
If group.Key.Age2 Then group2 = group.Count()
If group.Key.Age3 Then group3 = group.Count()
Next
' Obviously If Stop Then Error condition
If group1 + group2 + group3 <> myList.Count Then Stop
Console.WriteLine(String.Format("Groups: Less{0},From{1}To{2},MoreThan{3}", Age1, Age1, Age2 - 1, Age2))
Console.WriteLine(String.Format(" Age: {0,4},{1,8},{2,8}", group1, group2, group3))
'1,2,2,3,4,4,5,5,6,6,7,7,7,8,8,9,9,9,10,11
'Groups: Less5,From5To8,MoreThan9
'Age: 6, 12, 2