Подтвердить что ты не робот

Источник не содержит DataRows

DataTable dt = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date)
    .CopyToDataTable();

ds.Tables[4] имеет строки, но он генерирует исключение

"Источник не содержит DataRows.

Любая идея, как справиться или избавиться от этого исключения?

4b9b3361

Ответ 1

ds.Tables[4] может, но результат вашего linq-запроса может и не быть, что, вероятно, там, где возникает исключение. Разделите цепочку методов, чтобы использовать промежуточные параметры, чтобы вы могли быть уверены, где ошибка. Это также поможет вам проверить существующие строки перед вызовом CopyToDataTable() и избежать указанного исключения.

Что-то вроде

DataTable dt = null;
var rows = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);

if (rows.Any())
    dt = rows.CopyToDataTable();

Другой вариант - использовать функцию ImportRow на DataTable

DataTable dt = ds.Tables[4].Clone();
var rows = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);

foreach (var row in rows)
    dt.ImportRow(row);

Ответ 2

Простое разделение на две строки

var rowSources = ds.Tables[4].AsEnumerable()
           .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);
if(rowSources.Any())
{
   DataTable dt = rowSources.CopyToDataTable();
   ... code that deals with the datatable object
}
else
{
   ... error message ?
}

Это позволяет проверить, содержит ли результат какой-либо DataRow, если да, то вы можете вызвать метод CopyToDataTable.