我正在使用LINQ,我想将结果放入DataTable
这是一个简单的代码...
DataTable dt = new DataTable();
var qu = from p in DBop.SampleTBLs
select p;
dt= qu.///// why i am not getting CopyToDataTable here ?
我的代码有什么问题?
答案 0 :(得分:1)
扩展方法DataTableExtensions
扩展通用IEnumerable<T>
,其中Base-Class
T
为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);
How to: Implement CopyToDataTable Where the Generic Type T Is Not a DataRow
答案 1 :(得分:0)
您可能缺少对该类所在程序集的引用。如果我们检查CopyToDataTable()
的MSDN页面,我们会在页面顶部看到以下内容
命名空间:System.Data
程序集:System.Data.DataSetExtensions(在System.Data.DataSetExtensions.dll中)
这意味着您需要在文件顶部放置using System.Data;
,但您还需要确保project references中包含System.Data.DataSetExtensions.dll
。
其他一些不会显示的东西:DataSetExtensions
是.NET 3.5的新功能,所以如果你构建的是2.0,它也不会出现。另外qu
必须是与IEnumerable<DataRow>
协变的类,如果qu
不适合,现在将显示扩展方法。