OrderBy
LINQ ステートメントで匿名オブジェクトを操作しようとしましたが、今のところ失敗しています。
私はすでにこれらをチェックしました:
Anonymous IComparer implementation
C# linq sort - IComparer をインスタンス化する簡単な方法
C# の特定のフィールドでオブジェクトの配列をソートする方法は?
さまざまなアプローチを試すのに数時間を費やしましたが、欠けているものがあるはずです。
次のクラスがあるとします。
public class Product
{
public int Id {get; set;}
public string Name {get; set;}
public int Popularity {get; set;}
public decimal Price {get; set;}
}
Andproducts
はこれらのオブジェクトのリストです。
匿名オブジェクトで機能するように、この LINQ ステートメントを完成させるにはどうすればよいですか?
明確にするために、私はこれを別の方法で行うことができることを知っていますが、この特定の例を機能させる方法を学ぶことに非常に興味があります.
var sortedProducts = products
.OrderBy(p =>
new {p.Popularity, p.Price},
[IComparer magic goes here]);
次の実装で可能になるはずですProjectionComparer
:
これを行う方法はありますか?
アップデート:
私はこれについて簡単なパフォーマンス テストを行いました - 匿名の比較ソリューションと標準の 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