我在使用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".
这是我认为你的问题所在:
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技巧来禁止空指针.
| 归档时间: |
|
| 查看次数: |
7178 次 |
| 最近记录: |