[C#] ラムダ式での IN 句
ラムダ式で SQL の WHERE IN のようなことをするためには、検索の元となる値を配列にしてしまい、Contains を使用する。 そもそもデータを取得する時点で絞り込んでおくべきではあるが、こんな書き方もできるというメモ。 // 今さら DataTable ではあるが、使用されているケースは多い…はず? var dt = new DataTable(); dt.Columns.Add("Class", typeof(int)); dt.Columns.Add("Name", typeof(string)); for (var i = 0; i <= 10; i++) { var dr = dt.NewRow(); dr["Class"] = i; dr["Name"] = "Hoge " + i.ToString() + " 世"; dt.Rows.Add(dr); } for (var i = 11; i <= 20; i++) { var dr = dt.NewRow(); dr["Class"] = i; dr["Name"] = "Gege " + i.ToString() + " 世"; dt.Rows.Add(dr); } // 設定ファイルなどに記載された CSV を仮定。Class が 1 もしくは 3 であるレコードを取得する。 var settings = "1,3"; // string[] に分割後、List に変換。数値型にする。 var list = settings.Split(',').ToList().ConvertAll(x => int.Parse(x)); var ret = dt.AsEnumerable().Where(x => list.Contains((int)x["Class"])); foreach(var x in ret) { // 出力