C# 比较文件内容和表内容-编码问题?
我使用以下方法将文件内容读入数据表:C# 比较文件内容和表内容-编码问题?,c#,encoding,datatable,string-comparison,C#,Encoding,Datatable,String Comparison,我使用以下方法将文件内容读入数据表: public static DataTable GetFileContents(string filePath, IEnumerable<string> columnNames) { using (var conn = new StreamReader(filePath,Encoding.Unicode)) { string strLine;
public static DataTable GetFileContents(string filePath, IEnumerable<string> columnNames)
{
using (var conn = new StreamReader(filePath,Encoding.Unicode))
{
string strLine;
var dt = new DataTable();
var columnCount = 0;
const char delimiter = '\t';
foreach (var columnName in columnNames)
{
dt.Columns.Add(columnName, typeof(string));
columnCount++;
}
while ((strLine = conn.ReadLine()) != null)
{
var columnData = strLine.Split(delimiter);
var j = 0;
var columns = new string[columnCount];
while (j < columnCount)
{
columns[j] = columnData[j];
j++;
}
dt.Rows.Add(columns);
}
return dt;
}
}
我甚至尝试过以下方法:
dataTable.AsEnumerable().Single(
x => Encoding.Unicode.GetBytes(x.ItemArray[0].ToString()).SequenceEqual(Encoding.Unicode.GetBytes(tableRow[0].ToString())));
虽然我看到值完全匹配,但上面的Linq查询仍然失败,没有找到结果。你知道原因是什么吗
该文件为Unicode格式
示例代码:
var tableList = session.CreateSQLQuery(sqlString).List<object>();
foreach (var row in tableList)
{
var tableRow= (IList)row;
//my comparison code as mentioned above
//other code
}
var tableList=session.CreateSQLQuery(sqlString.List();
foreach(表列表中的变量行)
{
var tableRow=(IList)行;
//我的比较代码如上所述
//其他代码
}
从文件检索的值为1233的字节数组:
数据库中1233的字节数组:
您给出的
单个调用将无法编译-带有参数的版本接受委托,而不是bool
。因此,您正在运行的不是代码,这使得很难说出什么是错误的…@JonSkeet更新了问题,什么是tableRow
?如果您能将其转换成一个简短但完整的程序来演示问题,那将非常有帮助。@jonsket它基本上是一个集合(列表)
,包含一行中的所有列值。。我已经添加了一个简短的代码来说明如何检索它,仅供参考,我正在使用Nhibernate..嗯,LINQ to Objects确实可以工作,所以我相信这不是问题所在。但是如果不知道tableRow[0]
是什么,或者文本文件中有什么内容,就很难找出问题所在。同样,一个简短但完整的程序来演示这个问题会有所帮助。
var tableList = session.CreateSQLQuery(sqlString).List<object>();
foreach (var row in tableList)
{
var tableRow= (IList)row;
//my comparison code as mentioned above
//other code
}