168

I need to order by 2 columns using the entity framework.

How is that done?

return _repository.GetSomething().OrderBy(x => x.Col1   .. Col2)?

i.e

SELECT * FROM Foo ORDER BY Col1, Col2

5 Answers 5

337

Try OrderBy(x => x.Col1).ThenBy(x => x.Col2). It is a LINQ feature, anyway, not exclusive to EF.

65

Another way:

qqq.OrderBy(x => new { x.Col1, x.Col2} )
4
  • How do you order descending this way?
    – user551113
    Commented Mar 31, 2015 at 12:57
  • 11
    qqq.OrderByDescending(x => new { x.Col1, x.Col2} )
    – parfilko
    Commented Mar 31, 2015 at 16:30
  • 9
    I get an "At least one object must implement IComparable" error message when used with EntityFramework Core on two string fields.
    – olivierr91
    Commented Nov 20, 2017 at 21:20
  • Note, I came here looking for EF Core, so this error is probably exclusive to that but: "Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access. [uk.ac.sahfos.cpr.console.web]csharp(CS0746)"
    – Auspex
    Commented Oct 15, 2020 at 12:36
45

Try:

OrderBy(x => x.Col1).ThenBy(x => x.Col2)

For order by descending try this:

OrderByDescending (x => x.Col1).ThenByDescending (x => x.Col2)
6

Following sorting happens in the DB level. Not on the returned result.

Try:

IQueryable<a>.OrderBy("col1 asc, col2 asc")

Example 1:

ctx.CateringOrders.OrderBy("Details.DeliveryDate asc, Details.DeliveryTime asc")

Example 2:

ctx.CateringOrders.OrderBy("{0} {1}, {2} {3}", 
    "Details.DeliveryDate", "asc",
    "Details.DeliveryTime", "asc" 
)

Where IQueryable<a> is entity query, "col1 asc" is column 1 and sorting direction "col2 asc" is column 2 and sorting direction

1
  • You need to use System.Linq.Dynamic.Core to do this
    – calingasan
    Commented Dec 5, 2021 at 23:31
-7

Please note, this will not work with Telerik's Grid or any other Telerik's DataSource component. Although it uses prefiltered IQueryable object, sorting is always done automatically as last step effectively overriding your sorting settings.

You have to follow: Specifying default sort in grid

Not the answer you're looking for? Browse other questions tagged or ask your own question.