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
}