DataTable の Select は大文字、小文字、全角、半角を区別しない
DataTable.Select は、指定した検索条件により DataTable を検索し、結果を行で返してくれるメソッドです。
この Select は昔からあるメソッドで、DataTable を使っているソースの中には今でも見かけることがあります。安易に使っているケースも散見されますので、注意が必要です。
文字種は区別しない
例えば、以下のようなソースがあったとします。
結果として、何行 返却されるでしょうか?
var dt = new DataTable();
dt.Columns.Add(new DataColumn("Address", typeof(string)));
dt.Rows.Add("tokyo");
dt.Rows.Add("TOKYO");
var result = dt.Select("Address = 'tokyo'");
2 行返ってきます。
tokyo がヒットするのはわかりますが、TOKYO も返却されます。DataTable.Select のデフォルトの挙動です。
文字列を厳密に比較する
大文字、小文字、全角、半角を厳密に比較するには、CaseSensitive プロパティを true にします(デフォルトは false)。
var dt = new DataTable();
// 大文字、小文字、全角、半角を区別する。
dt.CaseSensitive = true;
dt.Columns.Add(new DataColumn("Address", typeof(string)));
dt.Rows.Add("tokyo");
dt.Rows.Add("Tokyo");
dt.Rows.Add("TOKYO");
var result = dt.Select("Address = 'tokyo'");
このソースでは、返却されるのは tokyo の 1行だけです。