DataTableにList(Of t)を入力する方法、またはList(Of t)をDataTableに変換する方法は?

StackOverflow https://stackoverflow.com/questions/1805626

質問

このトピックに関する多くの投稿を読みました。その中で最も最近の .NET-ジェネリックコレクションをデータテーブルに変換。残念ながら、すべて無効です。

構造の一般的なコレクションがあります:

Private Structure MyStruct
Dim sState as String
Dim lValue as Long
Dim iLayer as Integer
End Structure

Dim LOStates As New List(Of MyStruct)

DataTableにこの構造のリストを入力する必要がありますが、これを実行する方法がわかりません。 Visual Studio 2008でvb.netを使用しています。

どんな洞察も大歓迎です

役に立ちましたか?

解決

リンクしたコードは、メンバーがプロパティとして宣言されていることを前提としています。プロパティを宣言しませんでした。 Reflectionで動作させることができます:

Imports System.Reflection
...

      Public Shared Function ConvertToDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
        Dim table As New DataTable()
        Dim fields() As FieldInfo = GetType(T).GetFields()
        For Each field As FieldInfo In fields
          table.Columns.Add(field.Name, field.FieldType)
        Next
        For Each item As T In list
          Dim row As DataRow = table.NewRow()
          For Each field As FieldInfo In fields
            row(field.Name) = field.GetValue(item)
          Next
          table.Rows.Add(row)
        Next
        Return table
      End Function

他のヒント

@SamSelikoffと同じ問題があり、GetPropertiesに移動しました:

Public Shared Function ConvertToDataTable(Of t)(
                                                  ByVal list As IList(Of t)
                                               ) As DataTable
    Dim table As New DataTable()
    If Not list.Any Then
        'don't know schema ....
        Return table
    End If
    Dim fields() = list.First.GetType.GetProperties
    For Each field In fields
        table.Columns.Add(field.Name, field.PropertyType)
    Next
    For Each item In list
        Dim row As DataRow = table.NewRow()
        For Each field In fields
            dim p = item.GetType.GetProperty(field.Name)
            row(field.Name) = p.GetValue(item, Nothing)
        Next
        table.Rows.Add(row)
    Next
    Return table
End Function
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top