Wie eine Datatable mit einer List (Of T) oder konvertieren eine Liste zu füllen (t) zu einem Datatable?

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

Frage

Ich habe viele Beiträge zu diesem Thema lesen; unter ihnen und zuletzt .NET - Konvertieren Allgemeine Collection Datentabelle . Leider alles ohne Erfolg.

Ich habe eine generische Sammlung von Strukturen:

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

Dim LOStates As New List(Of MyStruct)

Ich brauche eine Datentabelle mit dieser Liste von Strukturen zu füllen, habe aber keine Ahnung, wie dies zu tun gehen. Ich verwende vb.net in Visual Studio 2008.

Keine Erkenntnisse werden sehr geschätzt

War es hilfreich?

Lösung

Der Code, den Sie verknüpft übernimmt die Mitglieder als Eigenschaften deklariert sind. Sie nicht erklären Eigenschaften. Sie können es mit Reflexion funktioniert:

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

Andere Tipps

Ich habe gleiches Problem als @SamSelikoff, zog nach 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top