C#でDataTableから行を検索(SELECT)するサンプルです。
.Selectメソッドを使用するパターンと、
Linqを使用するパターンの2パターンがあります。
サンプルソース
サンプルとして以下のDataTableを使用します。
using System.Data;
//データテーブルの生成
DataTable dt = new DataTable("PrefTable");
//データカラムの定義
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Population", typeof(int));
//データテーブルにテータを追加
dt.Rows.Add("北海道", 5248552);
dt.Rows.Add("青森県", 1246138);
dt.Rows.Add("岩手県", 1226430);
dt.Rows.Add("宮城県", 2303160);
dt.Rows.Add("秋田県", 965968);
例1)Populationが200万以上の行をSELECTする(Selectメソッド版)
// DataTableを検索する
DataRow[] drResult = dt.Select("Population >= 2000000");
// 検索結果をコンソールに出力する
foreach (var row in drResult)
{
Console.WriteLine(row[0] + ":" + row[1]);
}
結果
北海道:5248552
宮城県:2303160
.Selectメソッドの引数に条件式を文字列で指定します。
例2)Populationが200万以上の行をSELECTする(LINQ版)
// DataTableを検索する
DataRow[] drResult
= dt.AsEnumerable().Where(x => x.Field("Population") >= 2000000).ToArray();
// 検索結果をコンソールに出力する
foreach (var row in drResult)
{
Console.WriteLine(row[0] + ":" + row[1]);
}
結果
北海道:5248552
宮城県:2303160
LINQの.Whereメソッドで条件を指定します。
備考
- LinqのWhereの詳細については、以下記事を御覧ください。
→ [C#] LINQラムダ式で検索する(.Where) - 検索結果をソートしたい場合は、以下記事をご覧ください。
→ [C#] DataTableをソートする