【问题标题】:Converting anonymous type to DataTable将匿名类型转换为 DataTable
【发布时间】:2011-09-02 09:02:49
【问题描述】:

匿名类型转DataTable最快的方法是什么?

更新: 我想从匿名类型获取和填充 DataTable。如果需要反射,我该如何使用反射呢?

【问题讨论】:

标签: c# .net-4.0 datatable asp.net-4.0 anonymous-types


【解决方案1】:

找到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);                 
}

请参阅此处了解通用解决方案:Convert generic List/Enumerable to DataTable?

【讨论】:

  • @Alex,如果你想要一个通用的解决方案,你应该说(另外,我编辑了我的答案以提供一个)。
【解决方案2】:
///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

记录在dt(数据表变量)

【讨论】:

  • 详情如下
【解决方案3】:

///汇总填充数据表一(dt1)

将 dt1 调暗为新数据表

dt1 = connection.LoadPoliceData("")

///汇总填充数据表一(dt2)

将 dt2 调暗为新数据表

dt2 = connection.LoadDataCompare("")

/// 摘要声明数据表保存。我想在哪里填写可枚举数据

Dim 另存为新数据表

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

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

///使用 dt1 和 dt2 的连接和 datatable(save) 编写 linq 查询的摘要

Dim data1 = (From datarow1 In dt1.AsEnumerable 在 dt2.AsEnumerable 中加入 datarow2 on datarow1.Field(Of String)("NameofPerson") 等于 datarow2.Field(Of String)("Name") 和 datarow1.Field(Of String)("Mobile") 等于 datarow2.Field(Of String)("MobileNumber ") 选择 save.LoadDataRow(New Object() {datarow1.Field(Of String)("NameofPerson"), datarow2.Field(Of String)("MobileNumber")}, False)).Distinct().ToList()

///数据表保存的汇总计数

Dim i = save.Rows.Count

【讨论】:

    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 2012-05-01
    • 2020-04-18
    • 2012-01-20
    • 2010-11-27
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多