4

グリッドが正しく表示されない理由を見つけるのに夢中になり、' (引用符) を使用せずに (数値のみの) varchar 列を比較することがわかりました。問題は、一部の番号では選択が一致し、他の番号では選択が一致しないことです。

これは例です:

DataTable tab = new DataTable();
tab.Columns.Add("age", typeof(String));
DataRow row1 = tab.NewRow();
row1["age"] = "8";
tab.Rows.Add(row1);
DataRow row2 = tab.NewRow();
row2["age"] = "15";
tab.Rows.Add(row2); 

Console.WriteLine("Rows with age 8="+ tab.Select("age=8").Length);
Console.WriteLine("Rows with age 15=" + tab.Select("age=15").Length);

出力は次のとおりです。

Rows with age 8=0
Rows with age 15=1

なぜ 8 の数字が一致せず、15 の数字が一致するのですか? これはバグですか?

4

1 に答える 1

0

内部文字列/整数比較のバグ (機能?) のようです。データを文字列として比較するには一重引用符を追加するか、整数として比較する必要があり、LINQ を使用できる場合は、次のようなことができます。

int i = tab.AsEnumerable().Where(x => Convert.ToInt32(x["age"]) == 8).Count(); // 1
于 2013-08-30T16:17:38.133 に答える