- 題名: DataTable.Selectで文字列に対する条件指定の評価方法について
- 日時: 2009/06/16 21:50:40
- ID: 24774
- この記事の返信元:
- (なし)
- この記事への返信:
- [24778] Re[1]: DataTable.Selectで文字列に対する条件指定の評価方法について2009/06/17 10:44:55
- ツリーを表示
■No24774に返信(moscさんの記事)
> DataTable.Selectで条件指定する際、対象の列が文字列であれば一重引用符でくくりますが、
> DataTable dt = new DataTable();
> dt.Columns.Add("Code");
> のような簡単なDataTableでCodeに1〜25までの"文字"が格納されているときに
意図的に、"文字" という言葉を選んでおられるようですが、
それはつまり、string(文字列)ではなく、char(文字)であるという意味でしょうか。
for (int i = 1; i <= 25; ++i) {
//string c = i.ToString();
char c = (char)i;
dt.Rows.Add(new object[] { c });
}
> DataTable.Select("Code=1");
> 〜
> DataTable.Select("Code=25");
> で抽出しようとすると、次のような結果になります。
これ、意外と複雑な問題かもしれません。
「string」の "1" 〜 "25" を格納したテーブルを走査したところ、
.NET 1.1 と .NET 2.0 とで、異なる結果となりました。詳細は後述。
> どのような評価をされてこのような結果になっているのでしょうか?
VS2008 だと、.NET の内部ソースまでデバッグ追跡できるので、
ある程度は調べられるかも知れませんが… .NET 1.1 の方は厳しいかも。
//////////// .NET 1.1 の結果 ////////////
1:1,
2:
3:
4:
5:
6:
7:
8:
9:
10:10,
11:11,
12:12,
13:13,
14:14,
15:15,
16:16,
17:17,
18:18,
19:19,
20:20,
21:
22:
23:
24:
25:
//////////// .NET 2.0 の結果 ////////////
1:1,
2:
3:
4:
5:
6:
7:
8:
9:
10:10,
11:11,
12:12,
13:13,
14:14,
15:15,
16:16,
17:Range オブジェクトの Min (8) は、 max (-1) 以下でなければなりません。
18:18,
19:Range オブジェクトの Min (10) は、 max (-1) 以下でなければなりません。
20:Range オブジェクトの Min (12) は、 max (-1) 以下でなければなりません。
21:
22:
23:
24:
25:
//////////// 検証コード ////////////
DataTable dt = new DataTable();
dt.Columns.Add("Code");
for (int i = 1; i <= 25; ++i)
{
//char c = (char)i;
string c = i.ToString();
dt.Rows.Add(new object[] { c });
}
for (int i = 1; i <= 25; ++i)
{
Console.Write(i + ":");
try
{
DataRow[] rows = dt.Select("Code=" + i);
foreach (DataRow row in rows)
{
Console.Write(row[0]);
Console.Write(",");
}
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
Console.WriteLine();
}
分類:[.NET]
DataTable.Selectで条件指定する際、対象の列が文字列であれば一重引用符でくくりますが、
DataTable dt = new DataTable();
dt.Columns.Add("Code");
のような簡単なDataTableでCodeに1〜25までの"文字"が格納されているときに
DataTable.Select("Code=1");
〜
DataTable.Select("Code=25");
で抽出しようとすると、次のような結果になります。
●抽出された行
1,10,11,12,13,14,15,16,17,18,19,20
●抽出されなかった行
2,3,4,5,6,7,8,9,21,22,23,24,25
Code='1'のように引用符をつけた場合は、全て正しく抽出されました。
文字列に対しては引用符をつけるのが正しいとは思いますが、
列に格納されているのが数字のみのときに、引用符なしで指定した場合、
どのような評価をされてこのような結果になっているのでしょうか?