[C#] DataTable の Row に対して LINQ とラムダによる検索をする

DataTable を使用している業務システムは多いものだが、foreach で回しているケースも少なくない。.NET Framework のバージョンが古い場合はどうしようもないが、バージョンだけ上がっている場合は LINQ や ラムダを使用して高速に検索することができる。
var dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
for (var i = 0; i <= 10; i++)
{
 var dr = dt.NewRow();
    dr["Name"] = "hoge" + i.ToString();
    dt.Rows.Add(dr);
}

var ret = 0;

// Name の末尾が 0 であるレコードをカウントする(LINQ)。
ret = (from x in dt.AsEnumerable()
  where Convert.ToString(x["Name"]).EndsWith("0")
        select x).Count();
        Console.WriteLine(ret.ToString());

// Name の末尾が 0 であるレコードをカウントする(ラムダ)。
ret = dt.AsEnumerable().Count(x => Convert.ToString(x["Name"]).EndsWith("0"));
  Console.WriteLine(ret.ToString());

// 出力 : 2

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で一部の図形だけ固定する