CopyToDataTable 方法 - ArgumentNullException

问题描述 投票:0回答:1

我在 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,实体数据模型

c# linq
1个回答
1
投票

您将获得

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
吧。

© www.soinside.com 2019 - 2024. All rights reserved.