Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how do I sort a collection with child property?

I should sort parent based on a field of child.

sample code;

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

//Child has a member (string) Name.

question: how can I sort Parent by Children Names.

like image 626
Nuri YILMAZ Avatar asked Jul 07 '11 21:07

Nuri YILMAZ


2 Answers

Your question is somewhat confusing, since first of all, it is tagged both with Entity Framework and LINQ-to-SQL. Which ORM are your actually using?

Secondly, and more to the point, you say that you want to "sort Parent by Children Names". Which child name do you want to sort by? You do realize that you can't compare a list of names to another list of names and decide which one should come before the other?

So if I assume you want to sort by the child name that comes first lexicographically, your solution would be the following (@Paul was close on this one, but you need to specify the property you are sorting by):

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

In this case, consider the following setup. Parent PA has children CB and CD while parent PB has children CC and CA. As a result of the sorting, parent PB will come first in the sorted list, since child CA will be used as the "main" child for PB, while CB will be the "main" child for PA. If that's not the behavior you are looking for, please provide an example and a clearer description.

like image 194
Yakimych Avatar answered Sep 23 '22 07:09

Yakimych


You can take one of the children names to sort by, probably select it by doing the corresponding sorting?

Something like:

IQueryable<Parent> data = context.Parents.OrderBy(
     p=>p.Children.OrderBy(chi => chi.Name).FirstOrDefault());
like image 26
Paul Avatar answered Sep 23 '22 07:09

Paul