我使用以下方法将文件的内容读入数据表:
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=>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 的字节数组:
来自 db 的 1233 字节数组: