我在CopyToDataTable方法中收到此错误。
ArgumentNullException值不能为空。参数名称:源
按照以下步骤操作 - http://msdn.microsoft.com/en-us/library/bb669096%28v=vs.110%29.aspx
public DataTable GetAllRecords()
{
try
{
DataTable dt = new DataTable();
IEnumerable<DataRow> query = ((from p in MedianDB.tblCountries
select p).OrderBy(p => p.CountryName)) as IEnumerable<DataRow>;
query.CopyToDataTable<DataRow>(dt,LoadOption.PreserveChanges);
return dt;
}
catch (Exception ex)
{
throw ex;
}
}
使用 .Net Framework 4.0,实体数据模型
好的,所以这很简单。您正在得到一个ArgumentNullException
,并记录如下:
源 IEnumerable 序列为空或目标数据表为空。
我们知道dt
不是null
所以这意味着问题是你query
null
。因此,要修复它,您应该能够利用AsEnumerable
扩展:
IEnumerable<DataRow> query = (from p in MedianDB.tblCountries
select p)
.OrderBy(p => p.CountryName)
.AsEnumerable();
query.CopyToDataTable<DataRow>(dt,LoadOption.PreserveChanges);
你不能只是把你得到的结果作为一个IEnumerable<DataRow>
,你需要让它成为一个IEnumerable<DataRow>
。as IEnumerable<DataRow>
,这段代码给了你一个null
。
仅供参考,这个catch
实际上比让它抛出更糟糕,因为您在此过程中丢失了堆栈跟踪:
catch (Exception ex)
{
throw ex;
}
如果你不打算真正处理它,就把try/catch
一起扔掉。