Há várias funções em .NET que requerem um IComparer e não aceitam um delegate Comparison, quer seja anónimo ou não. No entanto, a partir do .NET 4.5 há um novo método para criar um Comparer<T> a partir de um Comparison<T> anónimo.
As funções anónimas não só nos poupam ao esforço de escrever uma classe e um método à parte, mas também mantêm o código visível no mesmo sítio onde é usado. É óbvio que isto só é conveniente quando o código é curto e só é usado uma vez.
Com isto em mente, podem criar um comparador usando o método Comparer<T>.Create e passando um delegate anónimo Comparison<T>.
Vejam o seguinte exemplo que ordena uma enumeração por duas propriedades diferentes.
var result = people.OrderBy(p => p,
Comparer<Person>.Create((p1, p2) =>
{
int birthday = p1.Birthday.CompareTo(p2.Birthday);
if (birthday != 0)
{
return birthday;
}
return p1.Name.CompareTo(p2.Name);
}));