Могу ли я вложить OrderBy в .NET? - PullRequest
1 голос
/ 09 ноября 2009

Кажется, это не сработает, как я намереваюсь.

VB.NET:

Dim x = Model.Discussions.OrderByDescending(Function(d) d.Messages.OrderByDescending(Function(m) m.Sent).First.Sent)
For Each d As Discussion In x
    ...
Next

Я получаю эту ошибку во время выполнения:

Последовательность не содержит элементов

Там должно быть 20.

Обсуждения - это коллекции сообщений.

Я хочу отсортировать свои обсуждения по возрасту самого нового сообщения каждого.

Разъяснение

Мне нужно сортировать обсуждения, а не сообщения. Я хочу отсортировать мои обсуждения по совокупному расчету: MAX (отправлено) среди сообщений каждого.

Ответы [ 2 ]

5 голосов
/ 09 ноября 2009

Вам нужно использовать .OrderByDescending().ThenBy();

4 голосов
/ 09 ноября 2009

Я не думаю, что вам нужно OrderBy во внутреннем запросе - используйте Max (или Min):

Model.Discussions.OrderByDescending( _
    Function(d) d.Messages.Max(Function(m) m.Sent))

Хотя в VB я бы лучше использовал понимание запросов:

From d In Model.Discussions _
Order By (Aggregate m In d.Messages Into Max(m.Sent)) Descending _
Select d

Причина, по которой вы получили ошибку, по-видимому, заключается в том, что у вас есть обсуждение без сообщений; следовательно, вызов First вызвал исключение. Max сделает то же самое. Я не уверен, является ли это проблемой с вашим набором данных (кажется, что обсуждение без каких-либо сообщений не имеет смысла), но если это так, вам нужно использовать Enumerable.Empty() для дополнительной проверки .

...