匿名オブジェクトで動作するようにLECDステートメントでOrderBy
を取得しようとしましたが、今は失敗しています。LINQ OrderByプロジェクションコンバーターを使用した匿名オブジェクト
私はすでに、これらのチェック:
Anonymous IComparer implementation
C# linq sort - quick way of instantiating IComparer
How to sort an array of object by a specific field in C#?
を私は別のアプローチをしようと数時間を過ごしたが、私は欠けている何かがなければなりません。
はのは、以下のクラスがあります言ってみましょう:
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対匿名の比較演算のソリューションを、匿名のソリューションは、我々はとにかく期待しているかもしれないものはおそらくあるかなり遅いようです。 IComparer<T>
上を行うには
var sortedProducts = products.OrderByDescending(p => p.Popularity)
.ThenBy(p => p.Price);
:あなたは本当にあなたが同じように、組み合わせてOrerByとThenByを使用することができ、populartiy下降することにより、これらのオブジェクトを注文する匿名オブジェクトを必要とし、その後価格はありません
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
ご注文の基準は何ですか?あなたはそれが人気のものでなければならないと言っていますか? OrderByを人気につけて、次に価格で買ってみませんか? –
@JamesMichaelHare - それは例えばどんな違いがあれば二次的要因として低価格、のが主な要因として高い人気を言ってみましょう。編集:私はこれを行うことができますが、私は匿名オブジェクトのアプローチがまったく動作するかどうか、もしそうなら、私はちょうど方法を理解できないのだろうか知っている。 –
なぜOrderBy()で匿名オブジェクトを使用するのですか?なぜだけでなく: 'products.OrderByDescendingた(p => p.Popularity).ThenByた(p => p.Price)' –