質問

私は、オブジェクトのリストをソートするためのコードの既存のビットを持っています。

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等しくSomeId2に等しいと)でなくProductSomeId最初2に等しく、ProductSomeId4秒に等しいように、第2は、それらを注文します。デリゲートは、それが現在定義されているように、2つのSomeIdsがnullとは異なる任意のケースを処理しないためです。だから、限りデリゲートが懸念として、上記2 Productsは「等しい」ですが、LINQクエリに応じて、彼らはそうではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top