Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read
Q&A

Order a subcollection from linq

+2
−0

I am using linq/EF core to retrieve data via an API call.

How do I sort the collection of related data for each retrieved entity?

Assume the following structure: an Order is made on a certain date, and is comprised of (inter alia) a collection of OrderLines, where an OrderLine comprises a Product and a quantity.

How do I generate a list of Orders sorted by OrderDate, with the OrderLines for each Order displayed in Alphabetical order by Product?

I have tried:

context.TblOrder
    .Include(o => o.TblOrderLine
        .OrderBy(ol => ol.ProductName))
    .OrderBy(o => o.OrderDate);

But when I try to send that to a list, I get an Expression of type 'System.Linq.IOrderedQueryable1<T> cannot be used for return type 'System.Linq.IOrderedEnumerable1<T>

I also tried to retrieve (correctly sorted) OrderDetails separately as a DbSet (ie same as the context), but then I couldn't link them through the navigation property.

var lines = context.TblOrderLine
    .OrderBy(ol => ol.ProductName) as DbSet<TblOrderLine>;

context.TblOrders
    .Include(o => o.lines)
    .OrderBy(o => o.OrderDate);

TblOrder does not contain a definition for lines and no accessible extension method ... could be found.

How do I retrieve data with a correctly sorted sub-collection of data for each record?

Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

1 answer

+1
−0

If you are using .NET Core 5.0 or more you should be able to write something like the following (not tested):

var data = context.TblOrder
    .OrderBy(o => o.OrderDate)
    .Select(o => new 
    { 
       Order = o,
       OrderLines = o.TblOrderLine.OrderBy(ol => ol.ProductName)
    });

The advantage of this approach is that you can specify the exact columns you need and the query will be more efficient (Include gets all the columns).

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

Sign up to answer this question »

This community is part of the Codidact network. We have other communities too — take a look!

You can also join us in chat!

Want to advertise this community? Use our templates!

Like what we're doing? Support us! Donate