2012-10-15 50 views
0

我試着去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) 

+0

錯誤說的是什麼? – SLaks

+0

@SLaks我編輯的問題,所以你可以看到錯誤 –

+0

什麼是X.CAJERO的類型? –

回答

2

我認爲問題是,你想一個任意實體類型的IEnumerable<T>轉換 - 而CopyToDataTable()始終要求輸入爲的一些種類的DataRow

除非您的實體類型實際上來自DataRow,否則這不起作用。你可能會寫一個LINQ查詢,其中創建了 a DataRow來自每個實例,但我相信你必須自己編寫該代碼。

我相信你提到的問題,OP已經強類型DataSet - 至少答案是這樣的。

+0

是的,這是我從他使用order.Field (「OrderDate」)時可以假設的,是否要求提供一些代碼以開始LINQ查詢,從而創建每個實例的DataRow? –

+0

@AndreiD:那你試過什麼,出了什麼問題? (我沒有做過很多年的ADO.NET,尤其是原始的DataTable值...如果你有一個強類型的數據表,你是否也有強類型的行類型?如果是這樣,那很可能是你的答案...) –

+0

我編輯了顯示嘗試從結果集創建DataTable的問題 –