开发者

Can I Nest OrderBy in .NET?

开发者 https://www.devze.com 2022-12-10 18:47 出处:网络
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)

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消