我正在使用LINQ,我想把结果放入DataTable
这是一个简单的代码…
DataTable dt = new DataTable();
var qu = from p in DBop.SampleTBLs
select p;
dt= qu.///// why i am not getting CopyToDataTable here ?
我的代码有什么问题?
扩展方法DataTableExtensions
扩展一般IEnumerable<T>
,其中T
的Base-Class
为DataRow
。所以定义:
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
不适合扩展方法,现在将显示