CopyToDataTable方法 - ArgumentNullException

时间:2013-10-31 06:20:38

标签: c# linq

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

1 个答案:

答案 0 :(得分:1)

好的,所以这很简单。您收到的是ArgumentNullException,那是documented as such

  

源IEnumerable序列为null或目标DataTable为null。

我们知道dt不是null所以这意味着问题是querynull。因此,要解决此问题,您应该能够利用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