我正在尝试使用我的实体框架使用此代码创建数据表
private DataTable dtSubjects
{
get
{
object obj = this.Session["Subjects"];
if ((!(obj == null)))
{
return ((DataTable)(obj));
}
DataTable myDataTable = new DataTable();
myDataTable = from r in DbContext.Subjects
where r.LinkAnalysisId == LinkID
select r;
this.Session["Subjects"] = myDataTable;
return myDataTable;
}
}
但是我收到了这个错误。 无法将类型'System.Linq.IQueryable隐式转换为System.Data.DataTable'。存在显式转换
我尝试过投射到列表,但这不起作用。有人可以就这个问题说清楚吗?
由于
答案 0 :(得分:0)
您需要在项目中包含System.Data.DataSetExtensions并使用CopyToDataTable扩展方法:
DataTable myDataTable = new DataTable();
myDataTable = (from r in DbContext.Subjects
where r.LinkAnalysisId == LinkID
select r).CopyToDataTable();
编辑:在IEnumerable查询后添加ToList。
编辑2:在将对象转换为DataRow时查看此SO条目。然后可以将DataRows集合复制到DataTable中。 Converting class object to datarow using LINQ in vb.net.
答案 1 :(得分:-2)
尝试添加FirstorDefault();或第一();在你的select子句的末尾。
类似的东西:
DataTable myDataTable = new DataTable();
myDataTable = (from r in DbContext.Subjects
where r.LinkAnalysisId == LinkID
select r).FirstorDefault();
让我知道它是否有效。