我首先遇到了Entity Framework 5代码的排序问题。我正在创建一个论坛,我的模型中有两个类:
Messages有一个名为Comments的导航集合,由EF Code First和相关配置很好地处理。
在论坛的主页面中,我正在尝试按照上次评论日期对邮件进行排序,以便将最后评论的邮件放在最上面。我写了这段代码:
_messageRepository
.GetAll()
.OrderByDescending(m => m.Comments.Max(c => c.DatePost))
.ToList();
问题在于,当我发布新消息时,它没有评论,因此它位于页面底部。我想将最后的排序方法与之前的.OrderByDescending(m => m.Datepost)结合起来,不再适合我的需求...
有任何帮助吗? : - )
感谢的!
答案 0 :(得分:1)
这个怎么样?
_messageRepository
.GetAll()
.OrderByDescending(m => m.Comments.Max(c => (DateTime?)c.DatePost)
?? m.Datepost)
.ToList();
答案 1 :(得分:0)
在Linq-to-Objects中,您可以做到:
_messageRepository
.GetAll()
.OrderByDescending(m => m.Comments.Any()
? m.Comments.Max(c => c.DatePost)
: m.Datepost)
.ToList();
但是EF可能无法将其转换为SQL。您可以首先实现列表,然后调用.OrderBy
:
_messageRepository
.GetAll()
.AsEnumerable()
.OrderByDescending(m => m.Comments.Any()
? m.Comments.Max(c => c.DatePost)
: m.Datepost)
.ToList();