源不包含数据行

问题描述 投票:0回答:2
DataTable dt = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date)
    .CopyToDataTable();

ds.Tables[4]
有行但抛出异常

“源不包含数据行。”

知道如何处理或消除这个异常吗?

c# linq datatable dataset
2个回答
57
投票

ds.Tables[4]
可能有行,但 LINQ 查询的结果可能没有,这很可能是引发异常的地方。拆分方法链以使用临时参数,这样您就可以完全确定错误发生的位置。它还会帮助您在调用
CopyToDataTable()
avoid 表示异常之前检查现有行。

类似的东西

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);

9
投票

简单地分成两行

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 方法。

© www.soinside.com 2019 - 2024. All rights reserved.