Я пытаюсь выполнить простой запрос LINQ для свойства Columns таблицы DataTable:
from c in myDataTable.Columns.AsQueryable()
select c.ColumnName
Однако я получаю следующее:
Could not find an implementation of the query pattern for source type 'System.Linq.IQueryable'. 'Select' not found. Consider explicitly specifying the type of the range variable 'c'.
Как я могу заставить DataColumnCollection хорошо работать с LINQ?





Как насчет:
var x = from c in dt.Columns.Cast<DataColumn>()
select c.ColumnName;
Это потому, что dt.Columns является IEnumerable, но не IEnumerable <DataColumn>. Это просто функция того факта, что класс немного старше и не реализует новый универсальный тип. Когда вы Cast <> (), вы приводите к IEnumerable <T>, где определены методы расширения.
Вы также можете использовать:
var x = from DataColumn c in myDataTable.Columns
select c.ColumnName
По сути, он будет делать то же самое, что и код Дейва: «в выражении запроса явно типизированная итерационная переменная преобразуется в вызов Cast (IEnumerable)», согласно статье Enumerable.Cast<TResult> Method MSDN.
С синтаксисом метода Linq:
var x = myDataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName);
@Dave: Что в первую очередь вызывает эту проблему? Почему мы должны использовать Cast ()?