2009-05-15 5 views
14

Product 클래스의 두 개 이상의 속성으로 정렬해야하는 일반 List of (Of Product)가 있습니다.두 개 이상의 값으로 일반 목록 정렬

제품 클래스에는 "인기있는"숫자 (오름차순), "클릭 된"숫자 (desc), "이름"문자열 (오름차순) 속성이 있습니다. 속성의 이름을 지정하기 위해 목록에서 정렬되기를 원합니다.

어떻게 lamba 문으로 정렬 할 수 있습니까? 하나의 속성을 기반으로 목록을 정렬하는 것으로 판명 된 경우

답변

3

죄송하지만 C#을 알고 계십니까?

products.OrderBy(p => p.Popular). 
    ThenByDescending(p => p.Clicked). 
    ThenBy(p => p.Name); 

필요한 것을 얻을 수 있습니까?

+0

화려한! 나는 "ThenBy"에 대해 몰랐다 – BrokeMyLegBiking

30

EDIT 그냥 VB에서 질문했습니다. 다음은 VB.Net 솔루션입니다.

Dim list = GetSomeList() 
Dim sorted = list. _ 
    OrderBy(Function(x) x.Popular). _ 
    ThenBy(Function(x) x.Clicked). _ 
    ThenBy(Function(x) x.Name) 

C# 버전입니다. (가) 람다 식에 대한 질문에 대답하기 위해

var list = GetSomeList(); 
var sorted = list.OrderBy(x => x.Popular).ThenBy(x => x.Clicked).ThenBy(x => x.Name); 
5

다음, 그 VB는 여러 줄 람다 표현식을 지원하지 않기 때문에, 람다 표현식에 넣어 너무 복잡보십시오. 비 LINQ 솔루션을

:

당신은 비교 자로 명명 된 방법이 필요합니다

Private Function Comparer(ByVal x As Product, ByVal y As Product) As Integer 
    Dim result As Integer = x.Popular.CompareTo(y.Popular) 
    If result = 0 Then 
     result = x.Clicked.CompareTo(y.Clicked) 
     If result = 0 Then 
      result = x.Name.CompareTo(y.Name) 
     End If 
    End If 
    Return result 
End Function 

사용법 :

theList.Sort(AddressOf Comparer) 
+0

내가 가진 문제가 해결되었다. 감사! – John

+0

@Guffa - VB는 다중 람다 식을 지원합니다. –

+0

@roryap : 네, 맞습니다. 답이 쓰여진 때가 아닙니다. – Guffa

2
List<Product> sortedProducts = null; 
sortedProducts = products.OrderBy(p => p.Popular) 
         .ThenByDescending(p => p.Clicked) 
         .ThenBy(p => p.Name) 
         .ToList(); 
관련 문제