あなたが望むのは...それらがnullでない場合...それらをチェックすることだと思いますが、それらがnullの場合は無視しますか?
foreach (Shape shape in shapefile.Where(x=>
x.IgnoreField == null ||
x.IgnoreValue == null ||
x.GetMetadata(IgnoreField) != IgnoreValue)
また、LinQ をインデントすると、LinQ が何をしているかがとても簡単にわかることに注目してください。
特にこのような foreach ステートメントで使用する別のフォーマット手法は、列挙型を foreach ステートメントで使用する前に、適切な名前の変数に格納することです...
var shapesFilteredByIgnores = shapefile.Where(x=>
x.IgnoreField == null ||
x.IgnoreValue == null ||
x.GetMetadata(IgnoreField) != IgnoreValue)
foreach (Shape shape in shapesFilteredByIgnores)
もちろん、これは、変数に割り当てる意味のある変数名がある場合にのみ明確になります。