2010-01-08 3 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 같음)하지만 번째 SomeIdProduct로 주문한다 제 2 동일하고 SomeIdProduct4초 같다. 이것은 현재 정의 된 위임자가 두 개의 null이 아니며 서로 다른 경우를 처리하지 않기 때문입니다. 따라서 위임자와 관련하여 위의 두 Product은 "동등"하지만 LINQ 쿼리에 따르면 그렇지 않습니다.