我在 CopyToDataTable 方法中收到此错误。
参数空异常 值不能为空。 参数名称:来源
按照以下步骤进行操作 - 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 序列为 null 或目标 DataTable 为 null。
我们知道
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
吧。