Reputation: 1046
I am trying to sort my list by applying two order by
. I just want to sort my list by the following orders:
Order 1: DateTime Descending Order
Order 2: Level Ascending Order
Following is my code:
First Method:
var FinalQuery = (from s in data
join p in context.A on s.Id equals p.PId
join PR in context.P on s.RP equals PR.PId
where PR.PId == s.PId
&& PR.IsActive == true
select new List
{
//columns
});
Model.TotalRecord = FinalQuery.Count();
if (Model.IsExportData == false)
{
Model.ListItems = FinalQuery
.Skip(Filter.PageNumber == 0 ? 0 : Model.RecordPerPage * (Filter.PageNumber - 1))
.Take(Model.RecordPerPage).ToList();
Model.ListItems.OrderByDescending(x => x.LoggedDateTime.Value.Date).ThenBy(x => x.Level);
}
else
{
Model.ListItems = FinalQuery.ToList();
}
Second Method:
var FinalQuery = (from s in data
join p in context.A on s.Id equals p.PId
join PR in context.P on s.RP equals PR.PId
where PR.PId == s.PId
&& PR.IsActive == true
select new List
{
//columns
});
Model.TotalRecord = FinalQuery.Count();
if (Model.IsExportData == false)
{
Model.ListItems = FinalQuery
.OrderByDescending(x => x.LoggedDateTime.Value.Date)
.ThenBy(x => x.Level)
.Skip(Filter.PageNumber == 0 ? 0 : Model.RecordPerPage * (Filter.PageNumber - 1))
.Take(Model.RecordPerPage).ToList();
}
else
{
Model.ListItems = FinalQuery.ToList();
}
I am not getting the actual result.
Upvotes: 0
Views: 703
Reputation: 1899
You don't assign the result of your OrderBy Linq-Chain in your first method.
Instead of
Model.ListItems.OrderByDescending(x => x.LoggedDateTime.Value.Date)
.ThenBy(x => x.Level);
you have to assign it to something like
var result = Model.ListItems.OrderByDescending(x => x.LoggedDateTime.Value.Date)
.ThenBy(x => x.Level);
As you can see from the sources:
public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
return new OrderedEnumerable<TSource, TKey>(source, keySelector, null, false);
}
The OrderBy
returns a new OrderedEnumerable
, where the Sort()-Method of a list works on the list itself.
System.Collections.Generic.List.Sort
public void Sort() { Sort(0, Count, null); }
Upvotes: 2