我是 LINQ 新手,我想将 LINQ 查询转换为 DataTable
DataClassesDataContext db = new DataClassesDataContext(MyConncectionString);
IEnumerable<DataRow> qry = (IEnumerable<DataRow>)(from tbl in db.Table1.AsEnumerable()
select tbl);
DataTable dt=new DataTable();
qry.CopyToDataTable(dt, LoadOption.OverwriteChanges);
GridView1.DataSource = dt;
但是我得到了错误
Unable to cast object of type 'WhereSelectEnumerableIterator to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'.
谁能帮帮我
最佳答案
这些是基本概念:
.Net 框架附带了多个 LINQ 提供程序
LINQ to Objects。 System.Linq。它是 LINQ 核心,旨在与内存中的集合一起使用
LINQ to XML。 System.Xml.Linq 处理 XML 文档
LINQ 到数据集。使用 DataTable 和 DataSet 对象
LINQ to SQL。 System.Data.Linq 用于与SQL Server数据库一起工作
LINQ to Entities。 ( Entity Framework )用于处理多个数据库。它提供了更丰富的API
我认为您正在尝试做的是:
在从 LINQ to SQL 上下文返回的查询中,您想要返回 DataRow
对象的集合。
在 LINQ to SQL 对象和 DataRow 之间没有简单的转换,因此如果您坚持需要使用反射来获得所需的输出,Fastest way to fill DataTable from LINQ query using DataContext
现在,如果您真的想使用 DataTable 对象,那么我的建议是使用强类型数据集。要创建一个,只需将一个新的 DataSet 对象添加到您的项目,然后从服务器资源管理器中拖动表,就像您对 LINQ to SQL 对象所做的那样
如果可能,请评估使用 DataRow
的决定,而不是返回由 LINQ To SQL 生成的对象,或者甚至更好地创建您的自定义 DTO 对象
关于您的代码,我看不出有任何理由尝试使用 Datatable
对象(除非您不打算发布额外的代码来证明这一决定的合理性)。如果您只想设置控件的 DataSource
属性,只需执行以下操作:
var q = from tbl in db.Table1
select tbl;
this.myControl.DataSource = q;
this.myControl.DataBind();
如果需要,您可以将结果转换为匿名对象并将其用作DataSource
:
var q = from tbl in db.Table1
select new
{
MyNewProperty = tbl.ExistingProperty,
AnotherProperty = tbl.MyCoolerProperty
};
this.myControl.DataSource = q;
this.myControl.DataBind();
关于asp.net - LINQ to DataTable 简单快速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491594/