C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■87351 / 3階層)  datatableの条件抽出について
□投稿者/ 魔界の仮面弁士 (1663回)-(2018/05/14(Mon) 15:01:33)
2018/05/15(Tue) 11:43:46 編集(投稿者)

No87350 (kenta さん) に返信
> 取り込んだCSVデータは以下のデータです(とりあえずA列のみ)
Console.WriteLine( ds.Tables["TableA"].Columns["A"].DataType.FullName );
は "System.Int32" でしょうか。"System.String" でしょうか。あるいはそれ以外?


もしも String だとすると、"1" < "1ab" < "2" の関係が成り立つので、
大小関係が "1" < "10" < "2" の並びになること注意してください。


> DataRow[] ary = ds.Tables["TableA"].Select("A>=700");
今度は「700以上」にしたいのですね?


> ,11,
> ↑(なんで11?)
あれ? 「700以上」なのに 100 が現れた点はスルーですか?
条件は「A>=100」というわけでも無いですよね。

No87344 の条件は「A>=6」でしたが
No87350 の条件は「A>=700」で良いのですよね?



> ,798
> ↑(800ではないの?)

static void Main(string[] args)
{
  // TableA の A 列は int 型
  // TableB の A 列は string 型
  var ds = new DataSet();
  ds.Tables.Add("TableA").Columns.Add("A", typeof(int));
  ds.Tables.Add("TableB").Columns.Add("A", typeof(string));
  for (int a = 1; a <= 800; a++)
  {
    ds.Tables["TableA"].Rows.Add(a);
    ds.Tables["TableB"].Rows.Add(a.ToString());
  }
  ds.AcceptChanges();

  // 上記までは事前準備
  // 以下は No87350 のコードの検証

  Console.WriteLine("int 比較なら問題は無い");  // 1 < 2 < 10 の関係
  DataRow[] ary = ds.Tables["TableA"].Select("A>=700"); // int比較
  foreach (var columns in ary)
  {
    Console.Write(columns["A"] + ",");
  }
  Console.WriteLine();
  Console.WriteLine();

  Console.WriteLine("string比較の場合は注意");  // "1" < "10" < "2" の関係
  // https://social.msdn.microsoft.com/Forums/ja-JP/6f99460f-ffae-40ce-b96b-ab1670ee977f/
  // 上記の理由により、下記はエラーになりえるので、指定してはいけない
  // ary = ds.Tables["TableB"].Select("A>=700"); // 型が違う
  // なので、こう書かねばならない(それが期待する結果であるかは別として)
  ary = ds.Tables["TableB"].Select("A>='700'"); // string比較
  foreach (var columns in ary)
  {
    Console.Write(columns["A"] +",");
  }
  Console.WriteLine();
  Console.WriteLine();

  // あるいは…
  Console.WriteLine("CONVERT関数でまとめてからという手もあるが、効率は落ちる");
  ary = ds.Tables["TableB"].Select("CONVERT(A, System.Int32)>=700"); // int比較
  foreach (var columns in ary)
  {
    Console.Write(columns["A"] +",");
  }
  Console.WriteLine();
  Console.WriteLine();


  Console.ReadLine();
}
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: datatableの条件抽出について /kenta →Re[4]: datatableの条件抽出について /WebSurfer
 
上記関連ツリー

datatableの条件抽出について / kenta (18/05/14(Mon) 11:46) #87344
Re[1]: datatableの条件抽出について / WebSurfer (18/05/14(Mon) 12:18) #87347
Re[1]: datatableの条件抽出について / furu (18/05/14(Mon) 12:14) #87346
Re[1]: datatableの条件抽出について / 魔界の仮面弁士 (18/05/14(Mon) 12:36) #87349
  └ Re[2]: datatableの条件抽出について / kenta (18/05/14(Mon) 13:19) #87350
    └ datatableの条件抽出について / 魔界の仮面弁士 (18/05/14(Mon) 15:01) #87351 ←Now
      └ Re[4]: datatableの条件抽出について / WebSurfer (18/05/15(Tue) 11:08) #87358

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信