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

转换泛型集合排序以利用Linq,linq,sorting,c#-3.0,generic-list,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) {

我有一段现有的代码,用于对对象列表进行排序

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 }
};
列表产品列表=新列表(){
新产品{StartDatetime=newdatetime(2010,1,1),SomeId=2},
新产品{StartDatetime=newdatetime(2010,1,1),SomeId=4}
};
以相反的顺序(第一个是
SomeId
等于
4
第二个是
SomeId
等于
2
第二个),但第二个是将它们作为
Product
SomeId
等于
2
第一个和
Product
SomeId
等于
4
第二个。这是因为当前定义的委托不处理两个
SomeId
s为非null且不同的任何情况。因此,就委托人而言,上述两个
产品
是“相等”的,但根据LINQ查询,它们不是