首页 > 解决方案 > 在 OrderbyDesceding linq 方法 Asp.Net core 2.0 中作为参数的对象列表

问题描述

我有两个模态类:

  1. 对话

    public long Id 
    public string SenderId
    public string RecieverId
    public virtual List<Message> Messages
    public virtual User User
    
  2. 留言

    public long Id
    public string MessageBody
    public long ConversationId
    public string SenderId 
    public DateTime CreatedDate
    

我想OrderbyDescending在 Message 上进行所有对话CreatedDate

我的意思是对对话进行排序,其中最后一条消息是按创建日期最新的。像:

var conversations = _context.Conversations
    .Include(x => x.Messages)
    .Include(x => x.Users)
    .Where(x => x.RecieverId== userId)
    .OrderByDescending(x => x.Messages.Any(x => x.CreatedDate))
    .ToList();

但是这样我就不能写OrderByDescending声明了。

如果可以的话,请给我建议。

希望有人能理解我的观点。

标签: c#entity-frameworklinqasp.net-core-2.0

解决方案


您应该按对话中的“最新”消息排序,因此您需要按每条消息中的“最高”日期排序,这是使用 linqMax()方法实现的。看看它是否可以帮助你:

 .OrderByDescending(conversation => conversation.Messages.Max(message => message.CreatedDate)).ToList();

推荐阅读