2011-08-22 50 views
0

我想根據具有日期值的列對DataTable進行排序。我在來運行的問題,所以我創建了下面的測試方法:根據日期時間使用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對象。但仍然會出現上述錯誤。任何想法缺少什麼?

我使用C#3.5

+0

是你的DateTime字段可空類型在你的數據表? –

+0

是的,它是可以空的。但即使我在上面的方法使它不可空,它將無法工作.. – Amit

+0

事實上,你沒有DateTime字段。你只是有一個字符串字段,你試圖把它轉換成DateTime。 –

回答

0

嘗試改變下面一行:

table.Columns.Add("dateValue"); 

這樣:

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

拋出:DataSet不支持System.Nullable <>。爲了我。 – deepee1

+0

然後嘗試'DateTime' – BFree

+0

typeof(DateTime?)將不起作用,但使用typeof(DateTime)定義列做了工作。感謝BFree .. :) – Amit

0

如果去掉ToList()在它的作品最後一行。 ();();}}}。

看起來在調用ToList()時發生了轉換問題;

+0

這只是因爲IEnumerable懶惰,集合沒有枚舉。只要你對t變量做一個foreach,它就會炸燬...... – BFree

+0

正是.. @BFree它會拋出,而你做一個forEach – Amit

0

沒有指定列類型,所以儘量在現場使用對象:

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

相關問題