как отсортировать коллекцию с дочерним свойством? - PullRequest
5 голосов
/ 08 июля 2011

Я должен отсортировать родителя на основе поля child.

пример кода;

IQueryable<Parent> data = context.Parents.Include(o=>o.Children);

// Child имеет член (строку) Name.

question: как я могу отсортировать Parent по именам детей.

Ответы [ 2 ]

31 голосов
/ 08 июля 2011

Ваш вопрос несколько сбивает с толку, поскольку в первую очередь он помечен как Entity Framework, так и LINQ-to-SQL. Какой ORM вы на самом деле используете?

Во-вторых, и более того, вы говорите, что хотите "sort Parent by Children Names". Какое имя ребенка вы хотите отсортировать? Вы понимаете, что не можете сравнить список имен с другим списком имен и решить, какое из них должно предшествовать другому?

Так что, если я предполагаю, что вы хотите отсортировать по дочернему имени, которое идет первым по лексикографии, ваше решение будет следующим (@Paul был близок к этому, но вам нужно указать свойство, по которому вы сортируете): *

context.
Parents.
OrderBy(p => p.
             Children.
             OrderBy(c => c.Name).Select(c => c.Name).FirstOrDefault()
       );

В этом случае рассмотрите следующую настройку. Родитель PA имеет детей CB и CD, а родитель PB имеет детей CC и CA. В результате сортировки родительский элемент PB будет первым в отсортированном списке, поскольку дочерний элемент CA будет использоваться в качестве «основного» дочернего элемента для PB, тогда как CB будет «основным» дочерним элементом для PA. Если это не то поведение, которое вы ищете, приведите пример и более четкое описание.

3 голосов
/ 08 июля 2011

Вы можете взять одно из дочерних имен для сортировки, возможно, выбрав его, выполнив соответствующую сортировку?

Что-то вроде:

IQueryable<Parent> data = context.Parents.OrderBy(
     p=>p.Children.OrderBy(chi => chi.Name).FirstOrDefault());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...