Linq使用copyToDataTable将结果导入dataTable

时间:2013-08-16 09:47:03

标签: c# linq datatable dataset

我想将我的Linq结果放在数据集/数据表中。我目前遇到的问题是查询变量没有属性copyToDataTable。我收到了这个错误。

  

类型'x.v_Checklist'不能用作类型参数'T'   通用类型或方法   “System.Data.DataTableExtensions.CopyToDataTable

这是我的代码

protected void btnExcelCheckListDownload_Click(object sender, EventArgs e)
{
    DataSet dsTest = new DataSet();
    var db = new BillingEntities();
    var query = (from u in db.v_Checklist select u).AsQueryable();
    DataTable dt =  query.CopyToDataTable();
    dsTest.Tables.Add(dt);
    ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", dsTest);
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

来自How to: Implement CopyToDataTable Where the Generic Type T Is Not a DataRow

  

CopyToDataTable方法获取查询结果并将数据复制到DataTable中,然后可以将其用于数据绑定。   但是,CopyToDataTable方法仅在IEnumerable上运行   source 其中泛型参数T的类型为DataRow 。虽然这个   很有用,它不允许从一系列表创建表   标量类型,来自投射匿名类型的查询,或来自   执行表连接的查询。

这就是为什么你不能直接使用CopyToDataTable而不写一些扩展名。

链接主题介绍了如何实现两个自定义CopyToDataTable<T>扩展方法,这些方法接受T以外类型的通用参数DataRow