【发布时间】:2017-04-03 13:32:09
【问题描述】:
我有一个聊天应用程序并在边栏中。我需要使用 Entity Framework 显示所有用户名和我与他们对话的最后一条消息。以下是实体对象
public partial class ObjectMessage
{
public int Id { get; set; }
public int FromUserId { get; set; }
public int ToUserId { get; set; }
public string Body { get; set; }
public System.DateTime DateSent { get; set; }
public bool Unread { get; set; }
}
我尝试了以下查询,但没有产生预期的结果。
var messages = db.ObjectMessages.Where(x => x.ToUserId == userId || x.FromUserId == userId)
.OrderByDescending(x => x.DateSent)
.GroupBy(x => new { x.ToUserId, x.FromUserId })
.Select(x => new LastMessage
{
FromUserId = x.FirstOrDefault().FromUserId,
ToUserId = x.FirstOrDefault().ToUserId,
Body = x.FirstOrDefault().Body,
DateSent = x.FirstOrDefault().DateSent,
Me = x.FirstOrDefault().FromUserId == userId,
Unread = x.Count(i=> i.Unread)
}).OrderBy(x=> x.DateSent).ToList();
我的用户 ID 在两个属性中(从/到)。可能是表结构不是最好的方法,或者必须有一个好的方法来实现结果。请指教。
【问题讨论】:
-
顺便说一下,我有一个单独的用户列表,我会将最后一条消息附加到其相关用户。
-
当你是
FromUserId时,你需要最后一条消息,然后是ToUserId并将它们组合成Dictionary<UserId, message>之类的东西? -
无论我是 FromUserId 还是 ToUserId,我都需要最新消息。这样做的目的是我列出所有朋友列表名称,并在每个名称下显示对话的最后一条消息,无论是来自我还是他。
-
你只需要看看你发了最后一条消息还是没关系?
标签: c# asp.net entity-framework chat