使用LINQ查询DataColumnCollection

85

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

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

然而,我得到的是:

找不到 'System.Linq.IQueryable' 类型的查询模式实现。 找不到“Select”。 考虑显式指定范围变量“c”的类型。

我该如何让 DataColumnCollection 与 LINQ 兼容?

3个回答

145

如何考虑:

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

3
@Dave:这个问题的根本原因是什么?为什么我们需要使用 Cast() 函数? - Ryan Shripat
27
这是因为dt.Columns是IEnumerable而不是IEnumerable<DataColumn>。这只是因为该类有些老旧,没有实现新的泛型类型。当你使用Cast<>()时,你会转换为一个定义了扩展方法的IEnumerable<T>。 - Dave Markle

18

LINQ方法语法:

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

16

你也可以使用:

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

根据Enumerable.Cast<TResult> Method MSDN文章所述,在查询表达式中,显式类型化的迭代变量将有效地转换为Cast(IEnumerable)的调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接