public IDictionary <string, MessageInfo> GetMessageList(string fromuser, string touser) { var list = _service.GetList(m => m.FromUser == fromuser || m.ToUser == touser) .OrderByDescending(m => m.AddTime).ToList(); var messages = from m in list group m by new { m.FromUser, m.ToUser }; var connList = _connService.GetList(); var dic = new Dictionary <string, MessageInfo>(); foreach (var item in messages) { var username = item.Key.FromUser == fromuser ? item.Key.ToUser : item.Key.FromUser; var conn = connList.FirstOrDefault(c => c.UserName == username); if (conn == null) { continue; } var singleOrDefault = item.FirstOrDefault(); if (singleOrDefault == null) { continue; } var messageInfo = new MessageInfo() { UserName = username, Name = conn.Name, Content = singleOrDefault.Content, Avator = conn.Avator, ConnectionId = conn.ConnectionId }; dic.Add(username, messageInfo); } return(dic); }