Скорее всего, это связано с повторным использованием временной переменной в TryParse, без реального использования TryParse должным образом. Если какой-либо из параметров ненулевой, непустой, то независимо от того, что он будет пытаться ограничить ваш запрос, независимо от того, успешно ли выполнен TryParse или нет.
То, что вы должны делать, это иметь TryParse в условном выражении каждый раз, когда вы его вызываете.
if(Int32.TryParse(propertyTypeID, out temp))
{
props = ...
}
Вы также можете замкнуть оценку в исходную условную, так как вы требуете ОБА, чтобы она была ненулевой или пустой, И преуспели с анализом:
if(!String.IsNullOrEmpty(id) && Int32.TryParse(id, out temp))
{
props = ...
}
Так что, если не удастся выполнить синтаксический анализ строки до целого числа, он не будет беспокоиться об условном выражении.