Я пытаюсь получить 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