【发布时间】:2012-12-05 21:35:07
【问题描述】:
所以我有一个 excel sheet 表和一个 mssql 表,这两个表正在使用 LINQ 连接到 excel 表第 0 列(第一个)和 mssql 列 textfield2。 我在加入字母数字值时遇到的问题,这似乎不起作用。当值是数字时,它确实有效。
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", excconnectionstring);
var adapter2 = new SqlDataAdapter("SELECT * FROM Table1", sqlconnectionstring);
var ds = new DataSet();
adapter.Fill(ds, "excel");
adapter2.Fill(ds, "sql");
var excel = ds.Tables["excel"].AsEnumerable();
var esqel = ds.Tables["sql"].AsEnumerable();
var query = from exc in excel
from sql in esqel
where exc[0].ToString() == sql.Field<string>("textfield2")
select new
{
debnr = sql.Field<string>("debnr"),
bedrag = double.Parse(exc[5].ToString())/100,
description = DateTime.Parse(exc[7].ToString(), new CultureInfo("nl-NL")).ToString("MMM yyyy"),
text1 = exc[0].ToString(),
projectno = sql.Field<string>("textfield1"),
central = sql.Field<string>("CentralizationAccount").Trim()
};
编辑:当我在 Excel 工作表中排序值并在顶部显示字母数字值时,似乎字母数字确实有效。但后来我遇到的问题是它不适用于数值..
【问题讨论】:
-
旁注:在 Linq-To-Objects 中链接表时使用
Joininstead ofWhere。 -
我无法重现;连接适用于两个表中的代码和字符串。我猜是少了点什么。
-
您必须确保将第一列中的数值转换为工作表本身中的文本。 OleDB 从前几行推断 Excel 列的类型。与类型不匹配的值作为 null 传递。另外,请注意前导和尾随空格。
-
OleDBDataAdaptor 根据数据开头的短样本设置列的类型 - 如果您的早期行都是整数,那么它将设置为整数并在遇到时吐出虚拟对象一个字符串。有一种方法可以强制将类型设置为字符串,但我不记得是多么随意,但如果你按照这些思路进行一些研究,你肯定会找到它。当你得到答案后,为我们发布!
-
原来如此。我能够编辑 excel 文件以使用互操作将列转换为文本并且它有效!