Pages

2014/09/20

[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
Related Posts Plugin for WordPress, Blogger...