Chat
有Messages
。鉴于MessageId
,我正在尝试获取接下来的50条消息。我现在应该在理论上工作,但是当我将所有内容加载到内存中时效率非常低。这是我到目前为止所做的:
// get message with parent chat / other messages
var message = db.ChatMessages.Include(s => s.Chat.Messages).First(s => s.ChatMessageId == messageId);
var chat = message.Chat;
// this is what I want to avoid, but I don't know how to get the position without throwing all messages into memory
var messages = chat.Messages.OrderByDescending(s => s.DatePosted).ToList();
var index = messages.IndexOf(message);
messages = messages.GetRange(index, index + 50);
return messages.ToList();
如何在不将每条消息都丢入内存的情况下执行此操作?
答案 0 :(得分:1)
如果你得到最后一条消息的Id(或其他独特的消息),这就变得更简单了。假设Ids总是递增......
var messages = chat.Messages.
Where(s=>s.Id > LastMessage.Id).
OrderByDescending(s => s.DatePosted).
Take(50);
如果你没有总是增加ID ...
var messages = chat.Messages.
Where(s=>s.DatePosted > LastMessage.DatePosted).
OrderByDescending(s => s.DatePosted).
Take(50);
return messages.ToList();