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();
}
修改後,程序運行就沒有問題了。