LINQのを利用するために、一般的なコレクションのソートの変換
-
19-09-2019 - |
質問
私は、オブジェクトのリストをソートするためのコードの既存のビットを持っています。
productsList.Sort(
delegate(Product p1, Product p2)
{
int result = p1.StartDatetime.CompareTo(p2.StartDatetime);
if (result == 0)
{
if (p1.SomeId == p2.SomeId)
{
result = 0;
}
else if (p1.SomeId == null)
{
result = -1;
}
else if (p2.SomeId == null)
{
result = 1;
}
}
return result;
});
私は、これはとそれを交換することによって単純化することができるという気持ちを持っています:
productsList = productsList
.OrderBy(p => p.StartDatetime)
.ThenBy(p => p.SomeId)
.ToList();
私は私の仮定で正しいでしょうか?
解決
はかなりそれは近いですされていません。最初に注文することができます。
List<Product> productsList = new List<Product>() {
new Product { StartDatetime = new DateTime(2010, 1, 1), SomeId = 2 },
new Product { StartDatetime = new DateTime(2010, 1, 1), SomeId = 4 }
};
逆の順序(SomeId
が第4
等しくSomeId
第2
に等しいと)でなくProduct
とSomeId
最初2
に等しく、Product
とSomeId
が4
秒に等しいように、第2は、それらを注文します。デリゲートは、それが現在定義されているように、2つのSomeId
sがnullとは異なる任意のケースを処理しないためです。だから、限りデリゲートが懸念として、上記2 Product
sは「等しい」ですが、LINQクエリに応じて、彼らはそうではありません。
所属していません StackOverflow