Запрос LINQ выбирает объект и его запрос на сбор

У меня есть сущность под названием Parent, в которой есть список дочерних элементов. теперь я хочу выбрать родителя и все его дочерние элементы в порядке отображения.

    entities:- class parent{
                          Int id;
                          List<Child> children;
                           }

                class Child{ 
                            String name;
                            DateTime DOB;
                            Int DisplayOrder;
                           }

ранее я получал родителя из базы данных, используя Linq to Entity как

                context.Parents.Find(id);

Это делало все нормально. но теперь мое требование изменилось, теперь мне нужно выбрать порядок дочерних элементов по их порядку отображения. Как мне это сделать. Любая помощь приветствуется.

обновить родительский класс: -

              class parent{
                        public  Int id;
                        public virtual List<Child> children;
                           }

person Learner    schedule 08.10.2014    source источник


Ответы (3)


Из предоставленной вами информации я предполагаю, что вы используете свой children где-то для их отображения, поэтому вы можете использовать только parent.children.OrderBy(x => x.DisplayOrder).ToList() вместо простого parent.children, который, как я полагаю, у вас был раньше.

Обновление 1.

Также я, насколько я помню, Find не буду включать ваших детей. Так что стоит попробовать что-то вроде:

var parent = context.Parents.Include(x => x.children).FirstOrDefault(x => x.id = id);
parent.children = parent.children.OrderBy(x => x.DisplayOrder).ToList();
person Vladimirs    schedule 08.10.2014
comment
нет, я получил доступ к model.children в моем файле .cshtml, где я использовал цикл for вместо foreach. я не могу это изменить, поэтому я спрашивал, могу ли я получить родителя с детьми в отсортированном порядке из самой БД - person Learner; 08.10.2014
comment
@iGod Я почти уверен, что вы сможете это изменить, просто покажите, как вы используете? Вы сможете создать еще одну локальную переменную, в которой вы будете хранить переупорядоченные детские элементы, и вы сможете сделать свой цикл против этого. - person Vladimirs; 08.10.2014
comment
Привет, Влад, против вашего обновленного комментария (извините, что использовал его). find также включает детей, и только сейчас я придумал это решение parent.children = parent.children.OrderBy(x => x.DisplayOrder).ToList(). но это нормально? - person Learner; 08.10.2014
comment
@iGod, который зависит от дизайна вашего приложения и среднего количества дочерних записей, но нет возможности выбрать родителя с упорядоченными дочерними записями. Единственное, что вы можете сделать там - выполнить этот порядок на стороне SQL-сервера: из p в контексте.Parents.Find(id) выберите новый {id = p.id, children = p.children.OrderBy(c => c.DisplayOrder) } - person Vladimirs; 08.10.2014

У вас есть команда Order By в списке, вы можете отправить контроллеру «столбец» и заказать по этому столбцу

person ETorre    schedule 08.10.2014
comment
Я неt get your point. i need to fetch a parent based on id passed and all itдети тоже упорядочил по порядку отображения - person Learner; 08.10.2014
comment
но вы можете использовать context.Parents.Find(id).OrderBy(order =› order.DisplayOrder); - person ETorre; 08.10.2014
comment
это не сработает, так как вы не можете использовать расширение orderby после Find(). и, кроме того, свойство порядка отображения предназначено для детей, а не для родителей - person Learner; 08.10.2014

Это на тот случай, если вы уверены, что может быть только один родитель с данным ID.

var parent = context.Parents.Find(id);
parent.children = parent.children.OrderBy(cl => cl.DisplayOrder).ToList();
person 26071986    schedule 08.10.2014
comment
я думал о том же. но я сомневаюсь, что это правильный подход - person Learner; 08.10.2014
comment
@iGod Конечно, это работает. Но, возможно, это не лучшее решение. Однако сам порядок parent.children не будет работать. - person 26071986; 08.10.2014