В вашем случае да. Вы передали set в контекст, и вы выполняете запросы на этом наборе. Я даже ожидаю, что оба запроса вытащили все сообщения из базы данных и выполнили запрос Linq в память вашего приложения из-за преобразования в IEnumerable<post>
, определенного вашим представлением. Если вы хотите выполнить только один запрос к базе данных вы должны передать загруженные объекты на ваш взгляд, используя, например:
var q = context.post.ToList();
Но было бы лучше, чтобы создать новую модель представления и выполнить два отдельных запроса в контроллере - вид должен быть свалка, и она не должна содержать каких-либо дополнительной логики:
var postModel = new PostViewModel {
Question = context.post.FirstOrDefault(o => o.parent == null),
Answers = cotnext.post.Where(o => o.parent != null).ToList()
};
return View(postModel);
Edit:
Как я смотрю на эти вопросы, это должно быть возможно даже выполнить их в один туда и обратно в базу данных с помощью Concat
- что-то вроде:
var result = context.post.Where(o => o.parent != null)
.Concat(context.post.Where(o => o.parent == null)
.OrderBy(...).Take(1))
.ToList();
var postModel = new PostViewModel {
Question = result.FirstOrDefault(o => o.parent == null),
Answers = result.Where(o => o.parent != null).ToList()
};
Он не проверял, но вы можете дать ему попробовать.
Вы можете попытаться выполнить 'var q = context.post.ToList();' в контроллере и посмотреть, помогает ли это. :) –
@ Trustme-I'maDoctor - Я доверяю вам, доктор – Mironline