2010-03-10 3 views
11

가 나는 두 개의 데이터 포인트를 포함 예를 들어 클래스가 있습니다.정렬합니다 속성리스트와는 다른

List<MyClass> list = new List<MyClass>() { 
    new MyClass(MyClass.Sort.Third, "B"), 
    new MyClass(MyClass.Sort.First, "D"), 
    new MyClass(MyClass.Sort.First, "A"), 
    new MyClass(MyClass.Sort.Fourth, "C"), 
    new MyClass(MyClass.Sort.First, "AB"), 
    new MyClass(MyClass.Sort.Second, "Z"), 
}; 

출력은 다음과 같습니다 내가 열거별로 그룹화 (많은 작은 배열로 항목을 구분하려면 foreach를 사용하여이 작업을 수행 할 수있었습니다

A 
AB 
D 
Z 
B 
C 

(Name 표시) 가치)하지만 이것은 매우 지루한 것처럼 보입니다. 그리고 저는 제가 모르는 LINQ 솔루션이 있어야한다고 생각합니다.

답변

20

확장 메서드를 사용하여 먼저 OrderBy 열거 형, ThenBy 이름. 당신이 언급 한 것처럼이 그것을해야

var sorted = list.OrderBy(m => m.Sort).ThenBy(m => m.Name); 
4

, 나는 좋은 LINQ 솔루션에서

var result = from m in list 
      orderby m.Sort, m.Name 
      select m; 
+0

이 구문은 유효하지 않습니다. 'select m'을 마지막에 놓아야합니다. 그러면 올바른 것입니다. –

+0

감사합니다. Ahmed, correct. 3am 실패 – pdr

5

을 제외하고 생각, 당신은 또한 비교 방법으로이 작업을 수행 할 수 있습니다. CompareTo 방법 등으로의 IComparable 인터페이스를 구현 MyClass 확인 : 열거에 의해 먼저 객체를 주문합니다

public int CompareTo(object obj) 
    { 
     MyClass other = (MyClass)obj; 
     int sort = this.srt.CompareTo(other.srt); 
     return (sort == 0) ? this.Name.CompareTo(other.Name) : sort; 
    } 

위의 방법 및 열거 값이 동일한 경우,이 이름을 비교합니다. 그런 다음 list.Sort()으로 전화하면 올바른 순서로 출력됩니다.

관련 문제