我是 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 到对象。系统.Linq。它是 LINQ 核心,旨在与内存中集合一起使用
LINQ 到 XML。 System.Xml.Linq 处理 XML 文档
LINQ 到数据集。使用 DataTable 和 DataSet 对象
LINQ 到 SQL。 System.Data.Linq 用于处理 SQL Server 数据库
LINQ 到实体。 (实体框架)用于处理多个数据库。提供了更丰富的API
我认为你想做的是:
从 LINQ to SQL 上下文返回的查询中,您希望返回以下内容的集合:DataRow
对象。
LINQ to SQL 对象和 DataRow 之间没有简单的转换,因此如果您坚持使用反射来获取所需的输出, 使用 DataContext 从 LINQ 查询填充 DataTable 的最快方法 https://stackoverflow.com/q/4953209/1268570
现在,如果您确实想使用 DataTable 对象,那么我的建议是使用强类型 DataSet。要创建一个,只需将一个新的 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)