无法将类型为'System.Data.EnumerableRowCollection`1 [System.Data.DataRow]'的对象转换为相同类型

时间:2010-06-21 09:27:30

标签: c# asp.net linq

我将代码发布到服务器(GoDaddy)时出现此错误,但是当我在代码中运行时本地出现

Unable to cast object of type
'System.Data.EnumerableRowCollection`1[System.Data.DataRow]' to type 
'System.Data.EnumerableRowCollection`1[System.Data.DataRow]'

错误触发的代码是:

foreach (DataRow dr in ds.Tables[0].Rows)
{
   error occuring here ==>  var images = (from DataRow myRow in ds.Tables[1].AsEnumerable()
                   where (int)myRow["ProductID"] == Convert.ToInt32(dr["ProductID"])
                   select myRow);


                   Product product = new Product(dr, images);
                   productCollection.Add(product);

 }

我不明白它是如何不能将一种类型转换为相同的类型以及为什么它只会发生在Web服务器上。域在3.5框架上建立,其他linq查询成功执行,所以我不知所措。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你是关于导致错误的那条线吗? 我希望在这里:

 Product product = new Product(dr, images);

但事实上,它不会发生在您的开发系统上,而是仅在部署之后表明程序集不同步。在服务器上重建和/或确保你推出所有程序集。

答案 1 :(得分:0)

我有一些非常相似的东西,花了几个小时把头包住。在我的情况下,我有

EnumerableRowCollection<DataRow> ercBarriers = tblReviewInfo.AsEnumerable().Cast<DataRow>().Where(x => !string.IsNullOrEmpty(x["Outcomes"].ToString()));

删除后.Cast()一切正常,这让我想知道你是否没有损坏的数据。请允许我解释一下:你有两个假定整数的地方。如果任何一个失败,则会抛出错误,但我不确定是否存在此错误。你可以测试你知道的事实包含所有整数的数据的代码吗?还要确保它们不是需要强制转换的大数字。只是预感。