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);
Просто убедитесь, что вам нужны только записи, которые есть на сегодня или в будущем? – ryanyuyu
это происходит потому, что никакие записи не соответствуют или не заполняют условие запроса, а результат равен null, поэтому здесь я пытаюсь скопировать значение null в datatable ... – Mike
, когда вы заполняете DataTable, не могли бы вы изменить запрос в отношении sql, используемого для заполнить исходный DataTable ..? также, что, если бы вы изменили выражение labda на запрос Linq .. подумали ли вы об этом также https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable%28v=vs .110% 29.aspx || https://msdn.microsoft.com/en-us/library/bb386921%28v=vs.110%29.aspx || http://forums.asp.net/t/1557426.aspx?query+CopyToDataTable+does+not+work+when+select+new+is+used – MethodMan