Проблема в том, как интерпретируются лямбды. В VS2008 лямбда-функция всегда интерпретируется как выражение, а не как выражение. Возьмите следующий блок кода в качестве примера
Dim x = 42
Dim del = Function() x = 32
del()
В этом случае код внутри лямбда-дель не выполняет присваивание. Вместо этого он выполняет сравнение между переменной x и значением 32. Причина в том, что VB не имеет понятия выражения, которое является присваиванием, только утверждение может быть присваиванием в VB.
Чтобы выполнить присваивание в лямбда-выражении, у вас должны быть возможности операторов. Это не будет доступно до VS2010, но когда это произойдет, вы можете сделать следующее
Dim del = Function()
x = 32
End Function
По сути, все, что не является одной строкой лямбды, интерпретируется как утверждение.