public List <Message> GetRecentMessages(int maxResult) { int offset = 0; var recentMessages = new List <Message>(); var messages = _messageDao.GetRecentMessages(offset, maxResult) .Where(CanRead) .ToList(); recentMessages.AddRange(messages); if (recentMessages.Count < maxResult) { do { offset = offset + maxResult; messages = _messageDao.GetRecentMessages(offset, maxResult); if (messages.Count == 0) { return(recentMessages); } else { messages = messages .Where(CanRead) .ToList(); } recentMessages.AddRange(messages); }while (recentMessages.Count < maxResult); } var commentsCount = _commentDao.GetCommentsCount(recentMessages.Select(r => (ProjectEntity)r).ToList()); recentMessages = recentMessages.Select((message, index) => { message.CommentsCount = commentsCount[index]; return(message); }).ToList(); return(recentMessages.Count == maxResult ? recentMessages : recentMessages.GetRange(0, maxResult)); }