比较文件内容和表格内容 - 编码问题?

时间:2012-05-14 06:01:12

标签: c# encoding datatable string-comparison

我使用以下方法将文件内容读入数据表:

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;
            }
        }

然后我将表中的内容检索到List中,然后将列表中的值与数据表中的值进行比较,主要比较如下:

dataTable.AsEnumerable().Single(x=>x.ItemArray[0].ToString().Equals(tableRow[0].ToString()))

我甚至尝试了以下内容:

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
}

从文件中检索的值为1233的字节数组: byte array of 1233 from file

来自db的1233字节数组: byte array of 1233 from db

0 个答案:

没有答案