В примере №2 ваш CInt бросок вызывает проблему.Конструкция If () пытается определить общий тип для 2-го и 3-го параметров.Видя второй параметр как целое число, он затем преобразует Nothing в целое число, которое из-за магического приведения VB приводит к 0. Например,
Dim i As Integer = Nothing 'results in i being set to 0
Чтобы получить то, что вы хотите с помощью If (), попробуйте следующее:*
Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue),
New Integer?(CInt(PC.SelectedValue)),
Nothing)