Linq查询时,涉及DataTable,查询结果可能为null,如果直接转换为新DataTable,则会报错。
例如:
try
{
List<int> intList = new List<int>();
intList.Add(1);
intList.Add(2);
DataTable table = new DataTable();
table.Columns.Add("ID", Type.GetType("System.Int32"));
table.Columns.Add("Name", Type.GetType("System.String"));
DataTable result = (from q in table.AsEnumerable()
join p in intList on q.Field<int>("ID") equals p
select q).CopyToDataTable();
}
catch (Exception ex)
{
throw ex;
}
上述程序运行是会报错:数据源中没有 DataRow。
由于查询结果没有数据,导致CopyToDataTable()方法报错。此种情况下,需要添加中间变量。
var result = from q in table.AsEnumerable()
join p in intList on q.Field<int>("ID") equals p
select q;
DataTable dt = table.Clone();
if (result.Count() > 0)
{
dt = result.CopyToDataTable();
}
修改后,程序运行就没有问题了。