[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