Я пытаюсь получить OrderBy в операторе LINQ для работы с анонимным объектом, но до этого не удалось.
Я уже проверил их: 
Анонимная реализация IComparer 
С# linq sort - быстрый способ создания экземпляра IComparer 
Как отсортировать массив объекта по определенному полю в С#? 
Я провел несколько часов, пытаясь использовать разные подходы, но мне нужно что-то упустить.
Скажем, что существует следующий класс:
public class Product
{
   public int Id {get; set;}
   public string Name {get; set;}
   public int Popularity {get; set;}
   public decimal Price {get; set;}
}
И products - список этих объектов. 
Как я могу заполнить этот оператор LINQ, чтобы он работал с анонимным объектом? 
Чтобы быть ясным, я знаю, что могу сделать это по-другому, но мне было бы очень интересно узнать, как заставить этот конкретный пример работать. 
var sortedProducts = products
                       .OrderBy(p => 
                              new {p.Popularity, p.Price}, 
                              [IComparer magic goes here]);
Кажется, что это возможно с реализацией ProjectionComparer: 
http://code.google.com/p/edulinq/source/browse/src/Edulinq/ProjectionComparer.cs?r=0c583631b709679831c99df2646fc9adb781b2be 
Любые идеи, как это сделать?
UPDATE:
Я сделал быстрый тест производительности на этом - анонимное решение для сравнения по сравнению с стандартным orderby.thenby, и кажется, что анонимное решение довольно медленное, что, вероятно, мы ожидали в любом случае.
         numProd  | Anon    | chained orderby clauses
         10 000   | 47 ms   | 31 ms
         100 000  | 468 ms  | 234 ms
         1 000 000| 5818 ms | 2387 ms
         5 000 000| 29547 ms| 12105 ms
