2009-12-29 2 views
8

나는 지금은 2 개 개의 다른 데이터베이스 테이블에서 일부 쿼리를 얻어서 이러한 클래스를 만들 난 그냥 일부 속성 속성이있는 클래스의 List 컬렉션을 정렬하는 방법은 무엇입니까?

public string id {get; set;} 
public DateTime date {get; set;} 

이 내 수업에서

List<MyClass> test = new List<MyClass>(); 

처럼 내 컬렉션 클래스의 목록을 가지고있다. 그런 다음 데이터베이스 테이블에서 2 개의 결과를 가져 와서 foreach 루프를 사용하여 새로운 MyClass 개체를 만들어 내 "test"컬렉션에 저장합니다.

이제 이러한 모든 클래스가 목록 컬렉션에 추가됩니다. 나는 그들을 통해 정렬하고 "날짜"속성에 의해 클래스를 주문하고 싶습니다.

어떻게하면됩니까? 2 개의 서로 다른 데이터베이스 테이블에서 데이터베이스를 가져오고 따로 따로 주문하면 데이터베이스에서 가져올 때 바로 주문할 수 없습니다. 각 섹션에 대해서만 주문할 수 있지만 테이블 하나에 12/12/2009가있을 수 있으므로 주문할 수 없습니다. 두 번째 테이블. 그래서 그들은 함께 주문해야합니다.

그래서 linq 또는 무엇인가를 주문하는 데 사용할 수 있습니까?

감사

답변

20

방법에 대해 :

list.Sort((x,y) => DateTime.Compare(x.date, y.date)); 
기존 목록을 정렬

, 또는 :

var sorted = list.OrderBy(x=>x.date).ToList(); 

두 번째 목록을 만듭니다. 당신이 장소에 정렬 할 경우

+0

예 아래에 언급했듯이 내가 게시하기 전에 두 번째 방법을 시도했지만 .ToList()를 사용하지 않았습니다. 따라서 orderBy는 항상 정렬하는 동안 새 목록을 만듭니다. – chobo2

+1

예. List.Sort는 원래 목록이 변경되도록 목록을 제자리에 정렬합니다. LINQ (두 번째 메서드)는 새 열거 형을 만듭니다. "ToList"를 추가하면 IEnumerable 대신 목록으로 바뀝니다. foreach 루프에서 결과를 사용하려는 경우 "ToList()"메서드를 해제 할 수 있습니다. –

+0

(그가 말한 것 ...) –

2

당신이 목록에서 수업을하고 목록이 완료되면 :

List<MyClass> testList = new List<MyClass>(); 
// populate the list... 

var orderedList = testList.OrderBy(x => x.date).ToList(); 
+0

아 I 그것을 시도했지만 뒤에 .ToList()를 넣지 않았습니다. 나는 어떤 사람들이 compare 함수를 사용하여 어떤 이점이나 다른 것을 가져 오는 것을 보았는가? – chobo2

3

, 당신은 List<T>.Sort 사용할 수 있습니다

test.Sort((l,r) => l.date.CompareTo(r.date)); 

을 새 결과 세트로 정렬하려면, LINQ는 아주 좋은 :

var sortedResults = from mc in test 
        order by mc.date 
        select mc; 
관련 문제