linq组消息仅显示最后一个消息,如应用程序执行的操作

时间:2020-05-18 00:14:33

标签: linq chat

我想做一个Whats App风格的聊天应用程序。 所以,我有一个消息表,像列 senderName,receiverName,消息,messageTime 我有用户表作为列 ID,用户名

我想显示whats应用程序样式窗口,该窗口显示带有名称的最后一条消息。 因此,用户可以单击它并查看来自该用户的所有消息。

例如


约翰

嗨,我在这里。 (日期)

Gabriel

是的。 (日期)

      db.Messages
     .Where(x => x.senderName == sessionName|| x.receiverName == sessionName).OrderByDescending(x => 
      x.Id).ToList()
     .GroupBy(m => new { V = m.senderName , V1 = m.receiverName })
     .Select(x => x.First());

我已经尝试过了。但这有问题。

1 个答案:

答案 0 :(得分:0)

以下是您正在寻找的工作示例;显示特定会话中发件人的最新消息(按最高ID)

void Main()
{
    var messages = GetMessages();

    var latest = messages
        .GroupBy(m => m.SessionName)
        .Select(grp => grp.OrderByDescending(g => g.Id).First())
        .ToList();

    latest.ForEach(l => Console.WriteLine($"{l.SenderName}\r\n{l.MessageText} ({l.SendDate:yyyy/MM/dd HH:mm:ss})"));
}

// Define other methods and classes here
public class Message
{
    public int Id { get; set; }
    public string SessionName { get; set; }
    public string SenderName { get; set; }
    public string ReceiverName { get; set; }
    public string MessageText { get; set; } 
    public DateTime SendDate { get; set; }
}

public IEnumerable<Message> GetMessages()
{
    return new[] 
    {
        new Message
        {
            Id = 1,
            SessionName = "Savage",
            SenderName = "James T. Kirk",
            ReceiverName = "Kahn",
            MessageText = "Why would a Starfleet admiral ask a three-hundred-year-old frozen man for help?",
            SendDate = new DateTime(2320, 5, 19, 15, 0, 0)
        },
        new Message
        {
            Id = 2,
            SessionName = "Savage",
            SenderName = "Kahn",
            ReceiverName = "James T. Kirk",
            MessageText = "Because I am better.",
            SendDate = new DateTime(2320, 5, 19, 15, 0, 10)
        },
        new Message
        {
            Id = 3,
            SessionName = "Savage",
            SenderName = "James T. Kirk",
            ReceiverName = "Kahn",
            MessageText = "At what?",
            SendDate = new DateTime(2320, 5, 19, 15, 0, 20)
        },
        new Message
        {
            Id = 4,
            SessionName = "Savage",
            SenderName = "Kahn",
            ReceiverName = "James T. Kirk",
            MessageText = "Everything. Alexander Marcus needed to respond to an uncivilized threat in a civilized time, and for that, he needed a warrior's mind - my mind - to design weapons and warships.",
            SendDate = new DateTime(2320, 5, 19, 15, 0, 30)
        }
    };
}