Возможный дубликат:
Почему в интерфейсе IEnumerable нет метода расширения ForEach?
ИЗМЕНИТЬ
Для справки, здесь сообщение в блоге, которое eric ссылается на комментарии
http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx
ORIG
Больше любопытства, я полагаю, но один для Savants Specification С#...
Почему предложение ForEach() не работает (или недоступно) для использования в наборах результатов IQueryable/IEnumerable...
Вы должны сначала преобразовать результаты ToList() или ToArray() Предположительно, это техническое ограничение на то, как С# выполняет итерацию IEnumerables Vs. Списки... Это как-то связано с отложенным выполнением IEnumerables/IQuerable Collections. например.
var userAgentStrings = uasdc.UserAgentStrings
.Where<UserAgentString>(p => p.DeviceID == 0 &&
!p.UserAgentString1.Contains("msie"));
//WORKS
userAgentStrings.ToList().ForEach(uas => ProcessUserAgentString(uas));
//WORKS
Array.ForEach(userAgentStrings.ToArray(), uas => ProcessUserAgentString(uas));
//Doesn't WORK
userAgentStrings.ForEach(uas => ProcessUserAgentString(uas));