2013-02-22 1 views
6

, 나는 최근에 대비, 시작의 날짜 별 목록을 주문하려면이 스크립트를 사용하고있는 순간 타입 DateLinq에서 날짜를 주문하는 방법? 나는 C# 및 LINQ를 사용하고

에 일부 날짜가 있습니다. 다음 코드와

는 내 이벤트가 정렬되지 않습니다 :

 events.OrderBy(x => x.DateTimeStart).ToList();  
     return events.AsQueryable(); 

은 여기에서 잘못 될 수 있을까?

+1

AsQueryable()과 ToList()는 기본 데이터 구조에 따라 크게 다른 것을 의미한다는 것을 기억하십시오. – flindeberg

답변

4

events.OrderBy(x => x.DateTimeStart) : 부동산 DateTimeStart하여 이벤트를 정렬하는 쿼리를 선언합니다. 쿼리가 아직 수행되지 않았습니다.

events.OrderBy(x => x.DateTimeStart).ToList(); : 이전 쿼리를 처리하십시오. 모든 이벤트를 반복하고 DateTimeStart을 확인하고 결과를 으로 정렬 한 다음 결과를 무시하십시오. 네가 안전하지 않았 으니까. 그런 식으로 비교 :

int a = 0; 
a + 1; 
b = a; // b is 0 

return events.AsQueryable();을 : 다음은 원래 이벤트 대신 정렬의 반환된다. 다음과 같이

당신은 당신의 코드를 작성해야합니다 버전은 정렬 된 이벤트의 정적 목록을 만들 것이다

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable(); 

. 이제 이벤트 목록을 변경하면 결과에 변경 사항이 반영되지 않습니다.

두 번째 솔루션은 다음과 같습니다

return events.OrderBy(x => x.DateTimeStart).AsQueryable(); 

해당 버전이 더 일을하지 않습니다. 그냥 이벤트를으로 정렬하고 IQueryable으로 해당 방식을 반환합니다. 이후 코드에서 반환 값을 사용하면 사용하기 전에 새 값을 추가하더라도 정렬 된 모든 이벤트가 항상 포함됩니다.

12

events.OrderBy(x => x.DateTimeStart).ToList()은 새 목록을 만들고 반환하지 않습니다.

당신은 아마 변수에 뭔가

return events.OrderBy(x => x.DateTimeStart).ToList(); 
+0

답변 해 주셔서 감사합니다. – GibboK

2

가게처럼 orderedevents을 원하고) (이 변수 asQueryable를 반환;

var orderedEvents = events.OrderBy(x => x.DateTimeStart).ToList();  

return orderedEvents.AsQueryable(); 

또는 변수가 필요하지 않은 경우 주문한 이벤트를 직접 반환하십시오.

return events.OrderBy(x => x.DateTimeStart).ToList().AsQueryable(); 
+0

은 ToList()가 LINQ 표현식을 평가하고 결과를 저장한다는 것을 언급할만한 가치가 있습니다. 그 후에 IQueryable을 그 목록 위에 반환하면 아무 쓸모가 없습니다. – publicgk

+0

네 말이 맞습니다. 나는 그의 업데이트 된 코드만을 제공하고있다.나는 그가 그것을 반환하는 이유를 모르겠다Queryable(); – Jehof

+1

어쩌면 그가 원하는 것은 다음과 같습니다 :'return events.OrderBy (x => x.DateTimeStart) .AsQueryable();' – publicgk

관련 문제