EF - 在排序查询中的特定元素之后获取X元素

时间:2014-01-19 17:52:31

标签: asp.net entity-framework

ChatMessages。鉴于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();

如何在不将每条消息都丢入内存的情况下执行此操作?

1 个答案:

答案 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();