Вы получаете ошибку в следующем операторе, потому что запрос выполняется, когда выполняется цикл For Each
(он называется выполнение defferd ).
Ошибка фактически говорит о том, что вы не можете выполнить Ordey By Group
, потому что IGrouping
не реализует IComparable
, поэтому результат вашего Group By
заявления не может быть упорядочен Сам IGrouping
.
Заказывать нужно по количеству элементов IGrouping
объектов.
Попробуйте это (заметьте, что я не знаю, как выглядят ваши занятия ...):
Dim objPersons = New YourClass() {New YourClass("Joe"), _
New YourClass("Joe"), _
New YourClass("Joe"), _
New YourClass("James"), _
New YourClass("James"), _
New YourClass("James"), _
New YourClass("James"), _
New YourClass("Mike"), _
New YourClass("Mike")}
Dim query = objPersons.Where(function(p) p.Person > 0) _
.GroupBy(Function(p) p.Name) _
.OrderByDescending(Function(g) g.Count) _
.Select(function(g) g.Key & ", " & g.Count())
For Each s In query
Console.WriteLine(s)
Next
Вывод:
James, 4
Joe, 3
Mike, 2