6

What is the fastest way to convert anonymous type to DataTable?

Update: I want to get and populate DataTable from anonymous type. If reflection is neccesary, how can I to do it using reflection?

Alexandre
  • 13,030
  • 35
  • 114
  • 173
  • 1
    Do you want a generic solution, or a solution for a specific anonymous type? – George Duckett Sep 02 '11 at 09:04
  • 2
    There's nothing special about anonymous types; answers for general lists (such as http://stackoverflow.com/questions/564366/generic-list-to-datatable) should still apply. Personally, I'd rather have the list of objects than the DataTable. – Marc Gravell Sep 02 '11 at 09:08

3 Answers3

12

Found here:

var result = from p in dataSource 
             group p by p.City into cities 
             select new { Property1 = cities.Key, Property 2= cities.Average(p => p.Age) }; 

dt.Columns.Add("Property1"); 
dt.Columns.Add("Property2"); 
foreach (var item in result) 
{   
    dt.Rows.Add(item.Property1,item.Property2);                 
}

See here for a generic solution: Convert generic List/Enumerable to DataTable?

Community
  • 1
  • 1
George Duckett
  • 31,770
  • 9
  • 95
  • 162
0
///fill dt1
Dim dt1 As New DataTable  dt1 = connection.LoadPoliceData("")
///fll dt2
Dim dt2 As New DataTable  dt2 = connection.LoadDataCompare("")
////fill enumerable data(anonymous data) in dt , using linq query
Dim dt As New DataTable
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Mobile", GetType(String))
Dim data1 = (From datarow1 In dt1.AsEnumerable Join datarow2 In  dt2.AsEnumerable
              On datarow1.Field(Of String)("NameofPerson") Equals  datarow2.Field(Of String)("Name") And datarow1.Field(Of String)("Mobile") Equals datarow2.Field(Of String)("MobileNumber")
              Select dt.LoadDataRow(New Object() {datarow1.Field(Of String)("NameofPerson"), datarow2.Field(Of String)("MobileNumber")}, False)).Distinct().ToList()

Dim i = dt.Rows.Count

record in dt(datatable variable )

-1

///summary fill datatable one (dt1)

Dim dt1 As New DataTable

dt1 = connection.LoadPoliceData("")

///summary fill datatable one (dt2)

Dim dt2 As New DataTable

dt2 = connection.LoadDataCompare("")

/// summary declare datatable save . where i want fill Enumerable data

Dim save As New DataTable

save.Columns.Add("Name", GetType(String))

save.Columns.Add("Mobile", GetType(String))

///summary writing linq query with join of dt1 and dt2 , And datatable(save)

Dim data1 = (From datarow1 In dt1.AsEnumerable Join datarow2 In dt2.AsEnumerable On datarow1.Field(Of String)("NameofPerson") Equals datarow2.Field(Of String)("Name") And datarow1.Field(Of String)("Mobile") Equals datarow2.Field(Of String)("MobileNumber") Select save.LoadDataRow(New Object() {datarow1.Field(Of String)("NameofPerson"), datarow2.Field(Of String)("MobileNumber")}, False)).Distinct().ToList()

///summary count of datatable save

Dim i = save.Rows.Count