Search code examples
entity-frameworkef-code-firstpococode-first

Entity Framework loading child collection with sort order


I have two tables a parent and a child table. The child table has a column sortorder (a numeric value). Because of the missing support of the EF to persist a IList inclusive the sort order without exposing the sortorder (see: Entity Framework persisting child collection sort order) my child class has also a property SortOrder, so that i can store the children with the sort order.

In contrast to the author of the referenced question I try to load the children always sorted. So if I load a parent instance I expect, that the child collection is sorted by sort order. How can I achieve this behaviour with the Code First Fluent API and POCO's?

Hint: It's not an option to call .Sort(...) on the child collection.


Solution

  • You cannot achieve it directly because neither eager or lazy loading in EF supports ordering or filtering.

    Your options are:

    • Sort data in your application after you load them from database
    • Execute separate query to load child records. Once you use separate query you can use OrderBy

    The second option can be used with explicit loading:

    var parent = context.Parents.First(...);
    var entry = context.Entry(parent);
    entry.Collection(e => e.Children)
         .Query()
         .OrderBy(c => c.SortOrder)
         .Load();