转换泛型集合排序以使用Linq

时间:2010-01-08 05:42:50

标签: linq sorting c#-3.0 generic-list

我有一些用于排序对象列表的代码。

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

我的假设是否正确?

1 个答案:

答案 0 :(得分: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 }
};

以相反的顺序(SomeId首先等于4SomeId等于2秒),但第二个会将它们命名为Product { {1}}首先等于SomeId2等于Product等于SomeId秒。这是因为当前定义的委托不处理两个4非空且不同的情况。因此,就相关代表而言,上述两个SomeId是“相等的”但根据LINQ查询它们不是。