0

オブジェクトのリストをソートするための既存のコードがあります。

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();

私の仮定は正しいですか?

4

1 に答える 1

2

完全ではありませんが、近いです。最初に注文できた

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 }
};

逆の順序 (with equals SomeIdfirst4およびSomeIdequals 2second) ですが、2 番目は、 withが最初に等しく、 withが2 番目に等しいように並べ替えます。これは、デリゲートが現在定義されているように、2 つの s が非 null で異なるケースを処理しないためです。したがって、デリゲートに関する限り、上記の 2 つは「等しい」ですが、LINQ クエリによると、そうではありません。ProductSomeId2ProductSomeId4SomeIdProduct

于 2010-01-08T05:48:02.493 に答える