This doesn't seem to work as I intend.
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
I get this runtime error:
Sequence contains no elements
There should be 20.
Discussions are collections of messages.
I want to sort my discussions by the age of the newest message of each.
Clarification
I need to sort my discussions, not my messages. I want to sort my discussions by an aggregate calculation: MAX(Sent) among the messages of each.
You need to use .OrderByDescending().ThenBy();
I don't think you need OrderBy
in the inner query at all - use Max
(or Min
):
Model.Discussions.OrderByDescending( _
Function(d) d.Messages.Max(Function(m) m.Sent))
Though in VB, I'd rather use a query comprehension:
From d In Model.Discussions _
Order By (Aggregate m In d.Messages Into Max(m.Sent)) Descending _
Select d
The reason why you've got the error that you did is, apparently, because you have some discussion with no messages; hence calling First
thrown an exception. Max
will do the same. I'm not sure if this is a problem with your data set (it doesn't seem like it's reasonable to have a discussion with no messages in it), but if it is, you need to use Enumerable.Empty()
for an extra check.
精彩评论