在我的数据库中,表 ChatMessage 哪个有列 标识符,消息,发件人,接收者。
现在在我的存储库中,我有获取消息的方法。
public IQueryable<ChatMessage> GetChatMessage(int PageNo, int PageSize, int ownerUserId, int friendUserId)
{
var query = this.GetQueryable().
Where(x => (x.Sender.Identifier == ownerUserId && x.Receiver.Identifier == friendUserId) ||
(x.Sender.Identifier == friendUserId && x.Receiver.Identifier == ownerUserId));
query = query.OrderByDescending(x => x.Identifier).Skip((PageNo - 1) * PageSize).Take(PageSize);
return query;
}
工作正常。但有一个场景:让我打开页面,获取前10条记录,同时OtherUser再向我发送2条消息。
现在,当我点击第二页时,我将收到下一条10条消息,但它将包含2条重复消息(我已经在第一页上了。)
如何避免这种情况?
我希望当我点击第二页时,我想要检索接下来的10条记录,不包括计算这2条新消息。
注意:我不想在会话中存储最后检索的行号,因为这是聊天系统,并且可能有许多用户同时聊天。
我想这样做是因为看到了这种情况。
现在点击 loadmore ,我会在接下来的10封邮件中添加旧li
答案 0 :(得分:0)
当您发送所有这些参数时,从客户端传递最早消息的时间(不需要页码)。然后在您的存储库中
public IQueryable<ChatMessage> GetChatMessage(int pageSize, int ownerUserId, int friendUserId, DateTime oldestMessageDate)
{
var query = this.GetQueryable().
Where(x => ((x.Sender.Identifier == ownerUserId && x.Receiver.Identifier == friendUserId)
|| (x.Sender.Identifier == friendUserId && x.Receiver.Identifier == ownerUserId))
&& x.MessageTime < oldestMessageDate);
//query now has all the messages older than messages shown to the user
query = query.OrderByDescending(x => x.Identifier).Take(PageSize);
return query;
}