我想做一个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());
我已经尝试过了。但这有问题。
答案 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)
}
};
}