how do I sort a collection with child property?

后端 未结 2 848
暗喜
暗喜 2020-12-09 22:46

I should sort parent based on a field of child.

sample code;

IQueryable data = context.Parents.Include(o=>o.Children);
相关标签:
2条回答
  • 2020-12-09 22:58

    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());
    
    0 讨论(0)
  • 2020-12-09 23:03

    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.

    0 讨论(0)
提交回复
热议问题