用LINQ查询DataColumnCollection


76

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

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

但是,我得到的是:

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

如何使DataColumnCollection与LINQ配合使用?

Answers:


130

怎么样:

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

3
@Dave:首先导致此问题的原因是什么?我们为什么要做Cast()?
Ryan Shripat 09年

24
这是因为dt.Columns是IEnumerable,而不是IEnumerable <DataColumn>。这只是一个事实,即该类有些旧并且没有实现新的泛型类型。当您Cast <>()时,您将转换为IEnumerable <T>,其中定义了扩展方法。
戴夫·马克尔

14

您还可以使用:

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

根据Enumerable.Cast<TResult> MethodMSDN的文章,它将有效地执行与Dave的代码相同的操作:“在查询表达式中,显式键入的迭代变量将转换为对Cast(IEnumerable)的调用” 。


8

使用Linq方法语法:

var x = myDataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.