IEnumerable - CopyToDataTable() Not Display

本文关键字:Not Display CopyToDataTable IEnumerable | 更新日期: 2023-09-27 17:55:06

我正在使用LINQ,我想把结果放入DataTable

这是一个简单的代码…

DataTable dt = new DataTable();
var qu = from p in DBop.SampleTBLs
          select p;
dt= qu.///// why i am not getting CopyToDataTable here ?

我的代码有什么问题?

IEnumerable - CopyToDataTable() Not Display

扩展方法DataTableExtensions扩展一般IEnumerable<T>,其中TBase-ClassDataRow。所以定义:

public static DataTable CopyToDataTable<T>(this IEnumerable<T> source ...)
                                           where T : DataRow

您的查询可能返回与DataRow不同类型的IEnumerable。

但是你可以像这样手动导出到DataTable:

//Create & Configure DataTable
var dt = new DataTable();
dt.Columns.Add("Name Column", typeof(string));
dt.Columns.Add("Name Column", typeof(int));
//Your IEnumerable Query 
var qu = from p in DBop.SampleTBLs
         select new object[] {p.SomeProperty, p.SomeProperty2};
//Add results to DataTable
foreach (var item in qu)
    dt.Rows.Add(item);

编辑:

如何实现泛型T不是DataRow的CopyToDataTable

您可能错过了对类所在的程序集的引用。如果我们检查MSDN页面的CopyToDataTable(),我们会在页面的顶部看到下面的

名称空间

:系统。数据
程序集: System.Data.DataSetExtensions(在System.Data.DataSetExtensions.dll中)

所以这意味着你需要有using System.Data;在文件的顶部,但你也需要确保你有System.Data.DataSetExtensions.dll包含在你的项目参考。

DataSetExtensions是。net 3.5的新特性,所以如果你是基于2.0构建的,它也不会显示。另外,qu必须是与IEnumerable<DataRow>协变的类,如果qu不适合扩展方法,现在将显示