【发布时间】:2015-05-28 13:14:30
【问题描述】:
我正在使用以下代码在两个表之间进行左外连接;一个来自 SQL,一个来自 MySQL。基本上,我想获取生成的 SQL 数据表,向其中添加一列,如果 MySQL 数据表中存在与 UserID 匹配的行,则将值添加到 SQL 数据表中的新列以获取匹配记录。
var dtResult = new DataTable();
dtResult.Columns.Add("UserID", typeof (int));
dtResult.Columns.Add("Field1", typeof (string));
dtResult.Columns.Add("Field2", typeof (int));
var result = from sqlDataRows in sqlDataTable.AsEnumerable()
join mySqlDataRows in mySqlDataTable.AsEnumerable()
on sqlDataRows.Field<int>("UserID") equals Convert.ToInt32(mySqlDataRows.Field<string>("SiteUserID")) into lj
from r in lj.DefaultIfEmpty()
select dtResult.LoadDataRow(new object[]
{
sqlDataRows.Field<int>("UserID"),
sqlDataRows.Field<string>("Field1"),
r == null ? 0 : r.Field<int>("Field2")
}, false);
但是,我在执行“Select dtResult.LoadDataRow”的行上收到“Specified cast is not valid”错误。我无法弄清楚原因,我已经三次检查数据类型是否匹配。
【问题讨论】:
-
顺便说一句,我发现它无法转换数据的原因是,在幕后,“Field2”是一个 MySQL Count() 函数,它返回 LONG 数据类型,而不是 INT !
标签: c# mysql sql linq datatable