Прежде всего, ваш второй запрос - это linq-to-objects, а не linq-to-entity - он всегда будет загружать сообщения всех пользователей и выполнять фильтрацию и упорядочивание на вашем сервере приложений. Далее вы явно не загружаете ответы, поэтому, как только вы начнете просматривать их, у вас будет отдельный ленивый загрузочный запрос для каждой проблемы post => N + 1.
Невозможно напрямую отсортировать дочерние объекты при загрузке данных с linq-to-entity. Вы должны использовать проекцию на анонимный тип:
var query = _db.WallPosts
.Where(x => x.UserId == userId)
.OrderByDescending(x => x.CreatedOn)
.Skip(5 * pageNumber)
.Take(5);
.Select(x => new
{
Post = x,
Replies = x.WallPostReplies.OrderBy(y => y.CreatedOn)
});
Итак, еще одна попытка: вы не можете получить WallPosts
экземпляров с отсортированными связанными сущностями (WallReplies
) от linq-to-entity. Вы должны сделать проекцию на WallPosts
в linq-to-objects:
IEnumerable<WallPosts> posts = query.AsEnumerable()
.Select(x => new WallPost
{
WallPostId = x.Post.WallPostId,
UserId = x.Post.UserId,
WallUserId = x.Post.WallUserId,
PostText = x.Post.PostText,
CreatedOn = x.Post.CreatedOn,
Replies = x.Replies
});