0

次の方法を使用して、ファイルの内容をデータテーブルに読み込みます。

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のバイト配列: ファイルからの1233のバイト配列

dbからの1233のバイト配列: dbからの1233のバイト配列

4

0 に答える 0