2011-08-22 4 views
0

날짜 값이있는 열을 기반으로 DataTable을 정렬하려고합니다. 내가 시험 방법에 따라 만든 그래서 나는 문제에 실행중인 :DateTime을 기준으로 LINQ를 사용하여 DataTable을 정렬하는 동안 문제가 발생했습니다.

private static void Test() 
    { 
     DateTime testDate = DateTime.Parse("01/01/2011"); 

     DataTable table = new DataTable(); 
     table.Columns.Add("dateValue"); 
     table.Columns.Add("slNo"); 

     DataRow row1 = table.NewRow(); 
     row1["dateValue"] = "01/01/2011"; 
     row1["slNo"] = "1"; 

     DataRow row2 = table.NewRow(); 
     row2["dateValue"] = "01/02/2011"; 
     row2["slNo"] = "1"; 
     DataRow row3 = table.NewRow(); 
     row3["dateValue"] = "02/01/2011"; 
     row3["slNo"] = "1"; 
     DataRow row4 = table.NewRow(); 
     row4["dateValue"] = "01/03/2011"; 
     row4["slNo"] = "1"; 

     table.Rows.Add(row1); 
     table.Rows.Add(row2); 
     table.Rows.Add(row3); 
     table.Rows.Add(row4); 

     var t = table.AsEnumerable().OrderBy(x => x.Field<DateTime?>("dateValue")).ToList(); 
    } 

것은 내가 오류에 따라 얻을 :

Specified cast is not valid. 

날짜 제공은 DateTime 개체로 해석 될 수있다. 그러나 여전히 위의 오류가 발생합니다. 어떤 아이디어가 빠졌습니까? 이것에

table.Columns.Add("dateValue"); 

:

table.Columns.Add("dateValue", typeof(DateTime?)); 
+0

입니까? –

+0

예, null입니다. 하지만 위의 메서드에서 nullable이 아닌 경우에도 작동하지 않습니다. – Amit

+0

사실 DateTime 필드가 없었습니다. DateTime으로 캐스팅하려고했던 문자열 필드가 있습니다. –

답변

0

다음 줄을 변경해보십시오 사용합니다.

var t = table.AsEnumerable(). OrderBy (x => x.Field ("dateValue")). ToList();

ToList() 호출에서 캐스트 문제가 발생하는 것으로 보입니다.

+0

오류 : DataSet은 System.Nullable <>을 지원하지 않습니다. 나를 위해. – deepee1

+0

그런 다음'DateTime'을 입력하십시오 – BFree

+0

typeof (DateTime?)는 작동하지 않지만 typeof (DateTime)를 사용하여 열을 정의하면 작업이 완료됩니다. Thanks BFree .. :) – Amit

0

당신이 그것을 작동 마지막 줄에서 ToList()를 제거하면

나는 C# 3.5

+0

IEnumerable이 게으르고 콜렉션이 열거되지 않기 때문입니다. 당신이 t 변수에 대해 foreach를 수행하자마자, 그것은 폭파 할 것입니다 ... – BFree

+0

정확히 ... 당신이 forEach를 수행하는 동안 @BFree는 던져 버릴 것입니다 – Amit

0

당신은 열 유형을 지정, 그래서 필드에서 개체를 사용하려고하지 않았다

당신의 날짜 시간 필드가 당신의 DataTable에서 nullable 형식

var t = table.AsEnumerable().OrderBy(x => x.Field<DateTime?>("object")).ToList();

+0

이것은 목적 의식을 제공하지 않습니다 .. 우리는 daveValue 필드를 기준으로 정렬을 수행합니다. – Amit

+0

oops, 다음과 같아야합니다. var a = table.AsEnumerable(). OrderBy (x => x.Field ("dateValue")). ToList(); – Blindsniper

관련 문제