【发布时间】:2013-10-31 06:20:37
【问题描述】:
我在 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,实体数据模型
【问题讨论】:
-
MSDN 链接显示
How to: Implement CopyToDataTable<T> Where the Generic Type T Is Not a DataRow。你的是DataRow。 -
是的...我的第一个猜测是
as IEnumerable<DataRow>导致分配给query的空值。如果您使用强制转换而不是as,如果类型实际上不是您所期望的,您将收到强制转换异常。 -
您真正想在这里实现什么? DataTable 是否比 from/select/orderby 的原始结果更好?更多上下文可能会帮助我们为您找到更好的答案。此外,
MedianDB.tblCountries的特定类型也会有所帮助。 -
我只想返回一个数据表。 GetAllRecords 是我用于许多表单的通用函数,因此 CopyToDataTable 方法对我来说很容易......我现在如何更改我的 linq 以使用 copytodatatable