次の方法を使用して、ファイルの内容をデータテーブルに読み込みます。
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のバイト配列: