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行だけです。

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で一部の図形だけ固定する