【问题标题】:DataTable does not contain definition for AsEnumerableDataTable 不包含 AsEnumerable 的定义
【发布时间】:2012-03-02 07:14:55
【问题描述】:

使用 linq 查询数据表返回以下错误:CS0117: 'DataSet1.map DataTable' does not contain a definition for 'AsEnumerable'

项目包括 System.Data.Datasetextensions 的参考。

这是代码。

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Reflection;
using System.Data;
using System.Linq;
using System.Data.Linq;
using System.Data.Common;
using System.Data.DataSetExtensions;
using System.Linq.Expressions;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

protected void Page_Load(object sender, EventArgs e)
    {
        var query1 = from mfg_nm in DataSet1.mapDataTable.AsEnumerable()

                     select mfg_nm;
}

在没有 AsEnumerable() 的情况下运行它会导致

var query1 = from mfg_nm in DataSet1.mapDataTable

                     select mfg_nm;

CS1660:无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型

提前感谢您的帮助

【问题讨论】:

  • 我认为您忘记接受答案作为正确答案。它有助于。谢谢

标签: c# asp.net linq-to-dataset


【解决方案1】:

method you wantSystem.Data 命名空间中,因此using 指令很好,但您还需要引用System.Data.DataSetExtensions 程序集。您确定您已将该引用作为程序集引用吗?

不清楚为什么你有一个 System.Data.DataSetExtensions 的 using 指令 ​​命名空间 - 这不会引发错误吗?

AsEnumerable() 调用的确切错误是什么? (我对您在第二种形式中遇到的错误感到惊讶......这不是我所期望的错误。)

【讨论】:

  • 感谢您的快速回复。删除了 System.data.datasetextensions。确认 System.data.datasetextensions 程序集。表单 web.config:
  • @user1169290:你能不能把它加到引用下面?我不知道将它放在 web.config 下是否会有所不同...
  • 这就是我添加的方式,我认为将这些行添加到配置文件中
  • 编译错误描述:在编译服务此请求所需的资源时出错。请查看以下特定错误详细信息并适当修改您的源代码。编译器错误消息:CS0117:“DataSet1.BIA_device_dp_mapDataTable”不包含“AsEnumerable”源错误的定义:第 32 行:protected void Page_Load(object sender, EventArgs e) 第 33 行:{ 第 34 行:var query1 = from mfg_nm in DataSet1 .BIA_device_dp_mapDataTable.AsEnumerable() 第35行:第36行:选择mfg_nm;
  • @user1169290:这很奇怪——你能在一个简短但完整的控制台程序中重现它吗?如果您尝试DataTableExtensions.AsEnumerable(DataSet1.BIA_device_dp_mapDataTable) 它会显示什么?
【解决方案2】:

在所有发生这种情况的情况下,都缺少对 System.Data.DataSetExtensions.dll 的引用。如果有疑问,请尝试创建一个针对 .NET 4 并引用 System.Data.DataSetExtensions.dll 的简单控制台项目,以验证添加该引用是否确实有效。

另请注意,您只需要使用 System.Data 命名空间。

顺便说一句,mapDataTable 是一个 DataTable,对吧?

【讨论】:

  • 是的,mapdatatable 是一个数据表
【解决方案3】:

谷歌搜索“system.data.datatable 不包含asenumerable 的定义”把我带到这里,我的麻烦就不见了:

using System.Data;

由于我的实施,错误消息有点误导。因此,我对这个问题的回答。代码就像...

public List<mytype> MyMethod(params) {
   return new mynamespace.myclasslib.myclass().GetDataTable(params).AsEnumerable()
      .etc
}

当我尝试显式声明 DataTable 时,很明显我缺少 using 语句。

【讨论】:

  • 只想添加我们也应该有 System.Linq
【解决方案4】:

我收到此错误消息: “System.Data.DataTable”不包含“AsEnumerable”的定义,并且找不到接受“System.Data.DataTable”类型的第一个参数的扩展方法“AsEnumerable”(您是否缺少 using 指令或程序集引用?)

添加

using System.Data;

在“参考”部分添加了“System.Data.DataSetExtensions”。它解决了问题。

【讨论】:

  • 这行得通。由于某种原因,没有任何问题被接受为正确答案。谢谢
【解决方案5】:

从“nuget”或“添加引用”添加System.Data.DataSetExtensions

添加此代码:

using System.Data.DataSetExtensions;

【讨论】:

    【解决方案6】:

    试试这个代码:

    DataSet1.mapDataTable.Select().AsEnumerable()

    【讨论】:

    • 请提供一些推理/解释,为什么您认为您的解决方案是合适的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多