获取Entity Framework和linq的对话列表

时间:2016-07-13 00:49:43

标签: c# asp.net-mvc entity-framework linq

我正在寻找一种获取近期对话列表的好方法。

我制作了一个收件箱ui,我希望能够实现一种获取对话列表的正确方法。

我设置了以下表格,与Message

有关系
  public class Message
  {
      public int Id { get; set; }
      public string Content { get; set; }
      public string UserId { get; set; }
      public ApplicationUser User { get; set; }

      public DateTime CreateDate { get; set; }
      public List<MessageReceived> MessagesReceived { get; set; }
      public List<MessageSent> MessagesSent { get; set; }
  }

  public class MessageReceived
  {
      public int Id { get; set; }
      public int MessageId { get; set; }
      public virtual Message Message { get; set; }

      public string FromUserId { get; set; }
      public ApplicationUser FromUser { get; set; }

      public string ToUserId { get; set; }
      public ApplicationUser ToUser { get; set; }

      public DateTime DateRecieved { get; set; }
      public DateTime DateRead { get; set; }
      public bool Deleted { get; set; }
  }

现在我在控制器中有这个

  public ActionResult Index()
  {
      var userId = User.Identity.GetUserId();
      var messages = db.MessageReceived.Where(p => p.ToUserId == userId).GroupBy(p => p.FromUser.UserName);
      return View(messages);
  }

这将返回用户已收到消息的用户名列表,包括接收消息时创建的所有行。这不是我的目标。在查询多个长对话时,它可能会变坏(

是否有更有效的方式来查询会话列表,而不是使用group by?

1 个答案:

答案 0 :(得分:0)

如果您只需要用户收到消息的名称列表,则可以通过以下方式查询:

var names = db.MessageRecieved.Where(p => p.ToUserId == userId).Select(p => p.FromUser.UserName).Distinct().ToList();