LINQ(无法将'System.Double'类型的对象强制转换为'System.String'.)

nee*_*MAX 1 .net c# linq

我在使用LINQ概念时遇到了问题.下面我比较两个数据表,一个是数据库,另一个是excel文件.

问题是当我在两个"tempdt"之间应用连接时包含提升铸造对象错误的双值.我无法将返回类型从字符串更改为double,因为它将来可能是任何数据类型,因为它目前是双倍的,将来可能是字母数字.

    var commonRows = from r1 in dt.AsEnumerable()
                             join r2 in tempdt.AsEnumerable()
                             on r1.Field<string>(0) equals r2.Field<string>(4)
                             select r2;
            if (commonRows.Any())
            {
                abcdefgh = commonRows.Count();
                dt123 = commonRows.CopyToDataTable();
                // ring the ghanta of gutlu
            }
Run Code Online (Sandbox Code Playgroud)

例外:无法将类型为"System.Double"的对象强制转换为"System.String".

Jen*_*ter 6

这是我认为你的问题所在:

from r1 in dt.AsEnumerable()
join r2 in tempdt.AsEnumerable() on
r1.Field<string>(0)  //<-- this may not be string
equals 
r2.Field<string>(4) //<-- this may not be string
select r2;
Run Code Online (Sandbox Code Playgroud)

可以 做的是把它当作对象:

from r1 in dt.AsEnumerable()
join r2 in tempdt.AsEnumerable() on
(string.Empty + r1.Field<object>(0)) <-- Edited by Andreas X
equals 
(string.Empty + r2.Field<object>(4)) <-- Edited by Andreas X
select r2;
Run Code Online (Sandbox Code Playgroud)

应该做的是确保你的索引号(0和4)指向相同的类型.

编辑:当询问tostring值时,我通常使用旧的ASP技巧来禁止空指针.