无法将类型'System.Linq.IQueryable隐式转换为System.Data.DataTable'。存在显式转换

时间:2015-12-08 15:56:41

标签: c# linq data-entry

我正在尝试使用我的实体框架使用此代码创建数据表

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'。存在显式转换

我尝试过投射到列表,但这不起作用。有人可以就这个问题说清楚吗?

由于

2 个答案:

答案 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();

让我知道它是否有效。