C# 4.0(正確には3.5からだそう)のDataTableにはforeach Rowsでぐるぐる回さずに様々な処理ができるWhere()、Select()などのメソッドが用意されている。
この仕組みはプロジェクトでSystem.Data.DataSetExtensions.dllを参照し、System.Data名前空間をusingする事で実現する。正確にはSystem.Data.dllの中にはMicrosoft .Net Framework 2.0相当のDataTableクラスが定義されており、System.Data.DataSetExtensions.dllの中にある拡張メソッドでDataTableクラスに対してAsEnumerable()やWhere()やSelect()が追加される仕組みになっている。

ところが、System.Data.DataSetExtensions.dllを参照しているにも関わらずDataTableでWhere()が使えない(コンパイル時に「そんなメソッドはない」と怒られる)。
ぐぐっても当然のようにドヤ顔で「System.Data.DataSetExtensions.dllを参照してください(キリッ)」とか書いてるブログとメソッド定義の説明だけのMSDNしかヒットしない。

蓋を開けてみるとなんでもない。System.Linq名前空間をusingすれば良かった。ソースファイルの先頭に

using System.Linq;

を追加する。なんだけど原理が分かっていれば納得もできるけど、拡張メソッドとLINQを両方分かってないとこの対処は思いつきもしないだろ。恥ずかしながら拡張メソッドもLINQも今まで漫然と「ふぅんこんなもんなんだ」と思って使っていたけど今回調べて初めて詳しい理屈が分かった。