【问题标题】:Querying DataColumnCollection with LINQ使用 LINQ 查询 DataColumnCollection
【发布时间】:2010-09-19 05:28:53
【问题描述】:

我正在尝试对 DataTable 的 Columns 属性执行简单的 LINQ 查询:

from c in myDataTable.Columns.AsQueryable()
    select c.ColumnName

但是,我得到的是:

找不到源类型“System.Linq.IQueryable”的查询模式的实现。未找到“选择”。考虑明确指定范围变量“c”的类型。

如何让 DataColumnCollection 与 LINQ 配合得很好?

【问题讨论】:

    标签: c# linq datatable asqueryable datacolumncollection


    【解决方案1】:

    怎么样:

    var x = from c in dt.Columns.Cast<DataColumn>()
            select c.ColumnName;
    

    【讨论】:

    • @Dave:首先是什么导致了这个问题?为什么我们必须做 Cast() ?
    • 这是因为 dt.Columns 是一个 IEnumerable,而不是一个 IEnumerable。这只是类有点旧并且没有实现新的泛型类型这一事实的一个功能。当您 Cast() 时,您将转换为定义扩展方法的 IEnumerable
    【解决方案2】:

    你也可以使用:

    var x = from DataColumn c in myDataTable.Columns
            select c.ColumnName
    

    它将有效地执行与 Dave 的代码相同的操作:“在查询表达式中,显式类型的迭代变量转换为对 Cast(IEnumerable) 的调用”,根据 Enumerable.Cast&lt;TResult&gt; Method MSDN 文章。

    【讨论】:

      【解决方案3】:

      使用 Linq 方法语法:

      var x = myDataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
      

      【讨论】:

        猜你喜欢
        • 2012-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多