Can anyone please explain why .net framework doesn't call compare method of my comparer when I use Enumerable.OrderBy. Whereas it does get called when I use List.Sort().
// The code below has been taken from another post on StackOverFlow.com
class Employee
{
public string Name { get; set; }
public int Salary { get; set; }
}
class Employee_SortBySalaryByAscendingOrder : IComparer<Employee>
{
#region IComparer<Employee> Members
public int Compare(Employee x, Employee y)
{
if (x.Salary > y.Salary) return 1;
else if (x.Salary < y.Salary) return -1;
else return 0;
}
#endregion
}
private void TestSort(object sender, EventArgs e)
{
List<Employee> empList = new List<Employee>()
{
new Employee { Name = "a", Salary = 14000 },
new Employee { Name = "b", Salary = 13000 }
};
Employee_SortBySalaryByAscendingOrder eAsc =
new Employee_SortBySalaryByAscendingOrder();
// Sort Employees by salary by ascending order.
// Does not work
IOrderedEnumerable<Employee> orderedEmployees = empList.OrderBy(x => x, eAsc);
// Works
empList.Sort(eAsc);
}
It doesn't work because you're not actually evaluating the orderedEmployees
sequence. You need to force the evaluation using ToList
or ToArray
.
Linq uses deferred execution so defining your ordering query in:
IOrderedEnumerable<Employee> orderedEmployees = empList.OrderBy(x => x, eAsc);
does not do any work to actually order the input sequence. Only when you try to use the result of the query will the ordering be done.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With