问题描述
public class Chat
{
public Guid SessionId { get; set; }
public DateTime MessageDateTime { get; set; }
public string Message { get; set; }
public Guid UserId { get; set; }
public string LastName { get; set;}
}
查看
@model IEnumerable<Chat.Chat>
@if (Model != null && Model.Count() > 0)
{
<div class="chats">
@foreach (var item in Model)
{
<div class="chat-item flex-row" sessionId="@item.SessionId" data="@item.UserId">
<div class="flex-column">
<div class="flex-row">
<h4 class="message-from">@item.LastName </h4>
<span class="message-time">@item.MessageDateTime</span>
</div>
<div class="flex-row">
<span class="message-body">@item.MessageContent</span>
</div>
</div>
</div>
}
</div>
}
此视图显示2个人之间的聊天。每个聊天都有自己的会话。和所有信使一样,我需要显示与我交流的人以及聊天中的最后一条消息。
如果只有2条消息,那么当我们从第一次迭代开始进入一个循环时,我们需要获取一个人的数据,然后再获取消息本身
我尝试使用按会话过滤所有消息并显示最后一条消息
var filteredMessages = Model.Where(p => p.SessionId != Guid.Empty)
.GroupBy(p => p.SessionId)
.Select(grp => grp.FirstOrDefault())
.OrderByDescending(d => d.MessageDateTime)
.ToList();
,但是此方法不能正确填写,它接收最后一条消息,但填写错误的用户数据。例如,我与某个用户交流,我首先给他写信,他回答了,然后我又回答了。该视图将填充我的用户数据(需要笔友),并正确填写最后一条消息。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)