2014-09-06 4 views
1

각 문자열이 한 달 + 연도 인 문자열 목록이 있습니다. 나는 비슷한 질문을 발견했다 here하지만 그것은 개월 목록에만 있었다. 내 목록은 이렇게 보입니다.목록에서 월 및 연도 정렬

List<string> monthsList = new List<string>(); 
     monthsList.Add("August 2015"); 
     monthsList.Add("June 2014"); 
     monthsList.Add("February 2014"); 
     monthsList.Add("June 2015"); 

이렇게 주문할 수있는 방법이 있습니까?

February 2014 
June 2014 
June 2015 
August 2015 
+1

왜 'DateTime'목록 대신'string' 목록이 필요합니까? 당신은 적절한 데이터 유형과 문제가 없어집니다. – wdosanjos

답변

7

당신이 DateTime.Parse 형식 그래서 달에 추가로 올해를 차지하고 있음을 변경할 수 있는지 확인하십시오 다음

DateTime.ParseExact(x, "MMMM yyyy", CultureInfo.InvariantCulture) 

그리고 당신은되도록 OrderBy 키 선택기를 변경할 수 있는지 확인하십시오 그것을

.OrderBy(x => x.Sort) 

전체 코드는 다음과 같이 보입니다.

var sortedMonths = monthsList 
    .Select(x => new { Name = x, Sort = DateTime.ParseExact(x, "MMMM yyyy", CultureInfo.InvariantCulture) }) 
    .OrderBy(x => x.Sort) 
    .Select(x => x.Name) 
    .ToArray(); 
+0

감사합니다. 문제는 2016 년 6 월을 목록에 추가하면 2014 년 6 월 2014 년 6 월 2015 년 6 월 2016 년 6 월 8 월 2015 년 8 월까지 결과가 출력됩니다. 목록의 마지막 위치 인 – mirosz

+0

위프가 필요합니다. 'Sort.Month'를'Sort'로 변경해야합니다. 최신 수정 사항을 확인하십시오 .-P –

+0

그게 전부입니다! 당신의 도움을 주셔서 감사합니다 – mirosz