仕事上、.NetのDataTableをよく触る。
主キーが設定されている場合はFindメソッドさんを使えば目的の行を取り出せる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
DataTable dt = new DataTable(); dt.Columns.Add("col1"); dt.Columns.Add("col2"); dt.PrimaryKey = DataColumn[] { dt.Columns[0] }; for (int i = 0; i < 10; i++) { DataRow dr = dt.NewRow(); dr["col1"] = i.ToString(); dr["col2"] = i.ToString()+"回目に追加された行です。"; dt.Rows.Add(dr); } //ここまでDataTableを作成しているだけ DataRow findDr = dt.Rows.Find("5"); Console.WriteLine(findDr["col2"].ToString()); |
上記は主キーが”5″である行を取得している。
で、このFindメソッドだけど、どうやら引数の末尾のスペースは考慮しないらしい。
つまり、
dt.Rows.Find(“5”)と
dt.Rows.Find(“5 “)は同じ結果になってしまう。
回避方法は今のところ不明。
DatatableのSelectメソッドも同様でした。
DataTableの情報には末尾空白のものを持たさないように工夫すべきなのかな。
今日の仕事でここで一瞬詰まった。
コード眺めると何の問題もなさそうだし。
デバッグしたらすぐにおかしいことに気がついたけど、
これは実装中は気付かないなぁ。
調べてみたけどあんまり文献がなかった。常識なのかな。
そういえばSQLのwhere句でも似たようなことがあった気がする。
あんまり覚えていないけど。