2009-09-10 5 views
4

У меня есть следующие основные классы (вырубленные на этот вопрос):Как вы сортируете родительскую и дочернюю коллекцию с помощью Linq?

public class Parent 
{ 
    public string Name { get; set; } 
    public IList<Child> Children { get; set; } 
} 

public class Child 
{ 
    public string Name { get; set; } 
} 

Если у меня есть коллекция Родитель, что я хотел бы сделать, это получить IList, отсортированный по Parent.Name, а также Дети для каждого родителя должны быть отсортированы по их имени.

Я попытался это (который сортирует только родители, а не дети):

IList<Parent> parents = ... //Populated 

parents.OrderBy(p => p.Name).ThenBy(p => p.Children.OrderBy(c => c.Name)).ToList() 

Я искал, но ничего не могу найти (вероятно, я быть немым).

Любые предложения для новичков Linq?

Заранее спасибо

Энди

ответ

4

Прежде всего, называя OrderBy в списке, как и вы, не сортирует его на месте. Он вернет новый отсортированный IEnumerable; вы можете использовать .ToList(), чтобы превратить его в список, но он все равно будет копией. Теперь о сортировке. Вам действительно нужно не просто заказать элементы в коллекции, но и сделать копию каждого элемента, которая также будет сортироваться по адресу Children. Таким образом:

IList<Parent> parents = ... //Populated 

parents = (from p in parents 
      orderby p.Name 
      select new Parent 
      { 
       Name = p.Name, 
       Children = p.Children.OrderBy(c => c.Name).ToList() 
      } 
     ).ToList(); 
+0

Совершенно спасибо большое. – andypike

Смежные вопросы