If you have written Linq queries, you are familiar with OrderBy clause. Here is a quick example:
from one in selected select one).OrderBy(one => one.Name)
If you only need to sort by single field, or even many fields, you are OK. Here is an example:
from one in selected select one).OrderBy(one => one.Name).ThenBy(one=>one.Title)
But what if you would like to sort by something more complicated, such as sum of Salary + Bonus in descending order, or even something more complex that that. Well, you can use a delegate that Linq provides for sorting:
return (from one in selected select one).OrderBy(one => SortFunction(one))
//descending sort
return (-returnValue);private double SortFunction(MyObject member) { double returnValue = member.Salary + member.Bonus;
}
The only catch your function must return the type that implements IComparable,which all primitive types do. You can actually even use a custom return types and use an additional OrderBy overload that accepts another parameter – custom comparer.
You can also do something very similar in Where clause that also accepts delegates. Pretty impressive if you ask me.