Linq Table 到 DataTable 转换

Posted

技术标签:

【中文标题】Linq Table 到 DataTable 转换【英文标题】:Linq Table to DataTable casting 【发布时间】:2010-12-28 10:59:18 【问题描述】:

如何投射

System.Data.Linq.Table<T>System.Data.DataTable

        DemoDBDataContext context = new DemoDBDataContext();
        DataSet ds = new DataSet();
        var query = context.Customers;   
        ds.Tables[0] = query;

如何做到这一点?任务

ds.Tables[0] = query;

它抛出

属性或索引器System.Data.DataTableCollection.this[int] 不能分配给它是只读的。

【问题讨论】:

【参考方案1】:

您不能将 System.Data.Linq.Table 转换为 DataTable,但是您可以轻松地在 IEnumerable 上编写扩展方法将其转换为 DataTable:

public static DataTable ToDataTable<T>(this IEnumerable<T> items)

    var tb = new DataTable(typeof(T).Name);
        PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
    foreach(var prop in props)
    
        tb.Columns.Add(prop.Name, prop.PropertyType);
    

    foreach (var item in items)
    
        var values = new object[props.Length];
        for (var i=0; i<props.Length; i++)
        
           values[i] = props[i].GetValue(item, null);
        

        tb.Rows.Add(values);
    
    return tb;

来源:http://www.chinhdo.com/20090402/convert-list-to-datatable/

【讨论】:

抱歉延迟回复。它正在工作,感谢您的链接。

以上是关于Linq Table 到 DataTable 转换的主要内容,如果未能解决你的问题,请参考以下文章

C#将LINQ数据集转换为Datatable

将 SQL 语句转换为 DataTable 上的 LINQ 查询

c#.net 如何将两个datatable拼接成一个Datatable

c#.net 如何将两个datatable拼接成一个Datatable

把Linq查询返回的var类型的数据 转换为DataTable

如何将 DataTable 转换为类 Object?