Product 클래스의 두 개 이상의 속성으로 정렬해야하는 일반 List of (Of Product)가 있습니다.두 개 이상의 값으로 일반 목록 정렬
제품 클래스에는 "인기있는"숫자 (오름차순), "클릭 된"숫자 (desc), "이름"문자열 (오름차순) 속성이 있습니다. 속성의 이름을 지정하기 위해 목록에서 정렬되기를 원합니다.
어떻게 lamba 문으로 정렬 할 수 있습니까? 하나의 속성을 기반으로 목록을 정렬하는 것으로 판명 된 경우
Product 클래스의 두 개 이상의 속성으로 정렬해야하는 일반 List of (Of Product)가 있습니다.두 개 이상의 값으로 일반 목록 정렬
제품 클래스에는 "인기있는"숫자 (오름차순), "클릭 된"숫자 (desc), "이름"문자열 (오름차순) 속성이 있습니다. 속성의 이름을 지정하기 위해 목록에서 정렬되기를 원합니다.
어떻게 lamba 문으로 정렬 할 수 있습니까? 하나의 속성을 기반으로 목록을 정렬하는 것으로 판명 된 경우
죄송하지만 C#을 알고 계십니까?
products.OrderBy(p => p.Popular).
ThenByDescending(p => p.Clicked).
ThenBy(p => p.Name);
필요한 것을 얻을 수 있습니까?
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);
다음, 그 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)
List<Product> sortedProducts = null;
sortedProducts = products.OrderBy(p => p.Popular)
.ThenByDescending(p => p.Clicked)
.ThenBy(p => p.Name)
.ToList();
화려한! 나는 "ThenBy"에 대해 몰랐다 – BrokeMyLegBiking