DataTableをSortするサンプルです。
.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列を降順でソートしてSELECTする(Selectメソッド版)
// DataTableを検索する
DataRow[] drResult = dt.Select("", "Population desc");
// 検索結果をコンソールに出力する
foreach (var row in drResult)
{
Console.WriteLine(row[0] + ":" + row[1]);
}
結果
北海道:5248552
宮城県:2303160
青森県:1246138
岩手県:1226430
秋田県:965968
.Selectメソッドの第2引数にソート条件を文字列で指定します。
ソート列を複数指定する事も出来ます。
(例)「Population desc, Name asc」
Selectの条件(Where)を指定したい場合は、第1引数に指定できます。
→ [C#] DataTableから行を検索(SELECT)する
例2)Population列を降順でソートしてSELECTする(LINQ版)
// DataTableを検索する
DataRow[] drResult
= dt.AsEnumerable().OrderByDescending(x => x.Field("Population")).ToArray();
// 検索結果をコンソールに出力する
foreach (var row in drResult)
{
Console.WriteLine(row[0] + ":" + row[1]);
}
結果
北海道:5248552
宮城県:2303160
青森県:1246138
岩手県:1226430
秋田県:965968
LINQの.OrderBy(昇順)、.OrderByDescending(降順)メソッドでソート条件を指定します。
備考
- LinqのOrderBy、OrderByDescendingの詳細については、以下記事を御覧ください。
→ [C#] LINQラムダ式でソートを行う(.OrderBy、.OrderByDescending)