IEnumerable - CopyToDataTable()不显示

时间:2014-03-31 06:19:23

标签: c# sql linq

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

这是一个简单的代码...

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

我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

扩展方法DataTableExtensions扩展通用IEnumerable<T>,其中Base-Class TDataRow。所以定义:

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不适合,现在将显示扩展方法。