使用LINQ查询DataColumnCollection

Dav*_*own 68 c# linq datatable asqueryable datacolumncollection

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

from c in myDataTable.Columns.AsQueryable()
    select c.ColumnName
Run Code Online (Sandbox Code Playgroud)

但是,我得到的是:

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

如何让DataColumnCollection与LINQ一起玩得很好?

Dav*_*kle 118

怎么样:

var x = from c in dt.Columns.Cast<DataColumn>()
        select c.ColumnName;
Run Code Online (Sandbox Code Playgroud)

  • 这是因为dt.Columns是IEnumerable,但不是IEnumerable <DataColumn>.这只是一个事实的函数,该类有点旧,并没有实现新的泛型类型.当您转换<>()时,您将转换为IEnumerable <T>,其中定义了扩展方法. (21认同)
  • @Dave:首先是什么导致了这个问题?我们怎么做Cast()? (2认同)

Cob*_*bra 13

你也可以使用:

var x = from DataColumn c in myDataTable.Columns
        select c.ColumnName
Run Code Online (Sandbox Code Playgroud)

它将有效地与Dave的代码相同:"在查询表达式中,显式类型的迭代变量转换为Cast(IEnumerable)的调用",根据Enumerable.Cast<TResult> MethodMSDN文章.


小智 6

使用Linq方法语法:

var x = myDataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
Run Code Online (Sandbox Code Playgroud)