In this post, I am going to show how to do ordering when you require to order data by using multiple columns.
By using .Orderby(x=>x.Columnname)
in a LINQ query, we can easily order data in a source collection. Most new developers make use of the same function twice .Orderby(x=>x.Columnname).Orderby(x=>x.Columnname)
and think that will do the ordering in multiple columns.
IEnumerable<Employee> emp = dc.Employees
.OrderBy(x => x.Name)
.OrderBy(x => x.Desc);
But it always does the order by the column you specified in the last OrderBy()
method.
Following are two solutions to achieve:
Solution 1
Always make use of ThenBy()
after OrderBy()
because OrderBy()
returns an IOrderedEnumerable
which then exposes the methods ThenBy()
and ThenByDescending()
. This means that we can OrderBy
on multiple fields by chaining OrderBy()
and ThenBy()
together.
IEnumerable<Employee> emp = dc.Employees
.OrderByx => x.Name)
.ThenBy((x => x.Desc);
Solution 2
If you don't want to go for Lambda expression, you can easily achieve multiple ordering:
var emp = from e in dc.Employees
orderby e.Name, e.Desc
select e;
As you can see, in the above statement, after order by
, you can add multiple columns and do the ordering on the multiple columns.