我在CopyToDataTable方法中遇到此错误。
ArgumentNullException 值不能为空。 参数名称:source
按照 - 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,实体数据模型
答案 0 :(得分:1)
好的,所以这很简单。您收到的是ArgumentNullException
,那是documented as such:
源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
。
仅仅是一个FYI,这个catch
实际上比让它抛出更糟糕,因为你在这个过程中丢失了堆栈跟踪:
catch (Exception ex)
{
throw ex;
}
如果你真的不想处理它的话,可以一起摆脱try/catch
。