2010-01-08 23 views
0

我有一個用於排序對象列表的現有代碼。轉換通用收集排序以利用Linq

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

我是在我的假設是正確的?

回答

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等於4第一和SomeId等於2秒),但第二個將他們順序作爲ProductSomeId等於2第一和ProductSomeId等於4秒。這是因爲按照當前的定義,代理不處理任何兩個SomeId非空且不同的情況。所以,就相關代表而言,上述兩個Product是「相等的」,但根據LINQ查詢,它們不是。