使用以下代码获取过滤后的DataTable
DT = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF").CopyToDataTable();
这段代码给了我错误
Source contains no data rows
这是正确的,实际上没有数据
我需要的是,如果没有数据行并且只返回空的DataSource,我需要避免异常。
我可以实现吗?
答案 0 :(得分:0)
var Rows = NewMobileFa.GetNewMobile().AsEnumerable().Where(r => arrList.Contains(r.Field<int>("NewMobileID")) && r.Field<string>("Status") == "OF");
现在使用行来检查数据是否存在
if(Rows.Count()>0)
{
DataTable dt = Rows.CopyToDataTable();
}
答案 1 :(得分:0)
这个问题似乎在4.0中得到修复,尽管它没有标记。
对4.0的快速测试按预期工作:
tbl.AsEnumerable().Where(r=>1==2).CopyToDataTable();
无论源DataTable是否为空,它都会成功创建一个包含0行的DataTable。
如果您使用的是旧版本的.NET框架,请使用其中一个重载,例如CopyToDataTable(IEnumerable, DataTable, LoadOption),如果源DataTable
中没有行,则不会抛出异常。
或者使用以下建议的方法之一:
How to deal with a flaw in System.Data.DataTableExtensions.CopyToDataTable()