Набор данных не содержит определения для строк - PullRequest
0 голосов
/ 01 октября 2019
DataSet dtCategory= Database.GetCategory();
string colValues = (from DataRow row in dtCategory.Rows select row["ColumnName"]).ToList();

Я сталкиваюсь с ошибкой, когда .Rows подчеркнут красным, говоря следующее:

Набор данных не содержит определения «Строки» и недоступен метод расширения «Строки». 'не удалось найти первый аргумент типа' DataSet '(вы пропустили директиву using или ссылку на сборку?

Могу ли я узнать, что мне следует изменить? Спасибо.

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Я думаю, вы пропустили понятия DataTable, DataTable и DataRow. DataSet представляет собой набор DataTables, вы можете найти DataRows только внутри DataTable. поэтому вам нужно сначала получить таблицы для доступа к строкам внутри таблицы.

Чтобы сделать код работоспособным, нужно внести еще несколько исправлений:

  • Вы объявили переменнуюcolValues в виде строки, и вы назначаете ей List (). Что поднимет вопросы компиляции. Лучший вариант - изменить тип назначения на List<string>.
  • Вместо того, чтобы обращаться к значениям строки, используя только имя столбца, используйте также соответствующий тип. как row.Field<string>("ColumnName")
  • Проверьте наличие таблицы в наборе данных для более безопасной стороны.

Окончательный код будет выглядеть следующим образом:

if (dtCategory != null && dtCategory.Tables.Count > 0) 
{
    List<string> colValues = (from DataRow row in dtCategory.Tables[0].Rows select row.Field<string>("ColumnName")).ToList();
}
0 голосов
/ 01 октября 2019

На самом деле строки - это не тип DataRow. Это тип DataRowCollection. Мы должны привести код, тогда только он будет получен как DataRow. Не могли бы вы попробовать следующий код.
var row = (из строки в dt.Rows.Cast () выбрать строку ["columnName"]);

...