Похоже, что мне не хватает директивы? System.Data.DataTableCollection не содержит определения для 'First'

У меня есть набор данных, где я запускаю цикл foreach в строках...

foreach(var row in input.Tables.First().Rows)
{....

но я получаю эту ошибку компиляции:

Ошибка 1 'System.Data.DataTableCollection' не содержит определения для 'First', и не может быть найден метод расширения 'First', принимающий первый аргумент типа 'System.Data.DataTableCollection' (вы пропускаете использование директива или ссылка на сборку?)

Мне кажется, что мне не хватает директивы, но я использую System.Linq, и у меня также есть System.Data.DataSetExtensions, добавленные в качестве ссылки.

Что мне не хватает? Любая помощь будет принята с благодарностью. Проект установлен на .NET 4.5

3 ответа

Подписи для First():

public static TSource First<tsource>(
 this IEnumerable<tsource> source
)
</tsource></tsource>

поэтому его нужно вызывать на IEnumerable.

DataTableCollection не реализует IEnumerable.

Чтобы использовать большинство методов Linq на нем (и для других типов, которые реализуют IEnumerable, но не IEnumerable), вам нужно использовать .Cast<t>()</t> или .OfType<t>()</t>:

input.Tables.Cast<datatable>().First().Rows
</datatable>


Вам не хватает операции Cast. DataTableCollection не реализует IEnumerable, поэтому Linq не применяет ни один из общих методов расширения.

Вы можете использовать Cast, чтобы сделать это общее перечисляемое. например:

foreach(var row in input.Tables.Cast<datatable>().First().Rows) {..
</datatable>


Можете ли вы попробовать:

input.Tables.OfType<datatable>().First().Rows
</datatable>

В частности, скажите, что это тип DataTable.

licensed under cc by-sa 3.0 with attribution.