我試着去LINQ查詢的輸出轉換成一個數據表,我有以下的代碼,但它顯示了(Of DataRow)
部分語法錯誤:CopyToDataTable(中的DataRow)顯示語法錯誤
Dim X As New Entities Dim query As IEnumerable(Of DataRow) = From cajero In X.CAJERO.AsEnumerable Select cajero Dim bla = query.CopyToDataTable(Of DataRow)()
我中號使用該問題爲指導: Filling a DataSet or DataTable from a LINQ query result set
如果我使用
query.CopyToDataTable() 'instead of the overload query.CopyToDataTable(Of DataRow)
它引發InvalidCastException。
我正在尋找一個簡單的方法來完成這項任務,這似乎是最簡單的一個,沒有太多的代碼,不得不實施任何「粉碎」方法等,但如果這是唯一的方法,那麼請指向正確的方向。
這是引發錯誤(我把它定位於英語,它有點在西班牙不同):
無法將類型的對象WhereSelectEnumerableIterator到對象IEnumerable類型的System.Data.DataRow
我曾嘗試以下:
聲明,將創建這樣的數據表的擴展方法:
_ Public Function myToDataTable(Of T)(source As IEnumerable(Of T)) As DataTable Dim properties As PropertyInfo() = GetType(T).GetProperties() Dim output As New DataTable() For Each prop In properties output.Columns.Add(prop.Name, prop.PropertyType) Next For Each item In source Dim row As DataRow = output.NewRow() For Each prop In properties row(prop.Name) = prop.GetValue(item, Nothing) Next output.Rows.Add(row) Next Return output End Function
但它總是會拋出一個異常,而添加列到數據表:
DataSet does not support System.Nullable
我也改變了LINQ查詢到這一點:
Dim query = From cajero In X.CAJERO Select cajero Dim bla = query.myToDataTable
繼Jon的建議,我發現這問題:
.NET - Convert Generic Collection to DataTable
剛剛給我的代碼的最後一點我需要:
output.Columns.Add(prop.Name, If(Nullable.GetUnderlyingType(prop.PropertyType), prop.PropertyType))
和
row(prop.Name) = If(prop.GetValue(item, Nothing), DBNull.Value)
錯誤說的是什麼? – SLaks
@SLaks我編輯的問題,所以你可以看到錯誤 –
什麼是X.CAJERO的類型? –