Этот код уже делает много вещей, разве вы не хотите разложить этот метод на более мелкие?
Вы можете извлечь метод, чтобы получить строковое значение:
select p.Name + "=" + GetPropertyValue(o, p);
И реализуйте это так:
private string GetPropertyValue(PropertyInfo i, object o)
{
var propertyValue = p.GetValue(o, null);
string stringValue;
if (propertyValue.GetType() == typeof(DateTime))
{
stringValue = ((DateTime)propertyValue).ToString(SomeCultureInfo);
}
else
{
stringValue = propertyValue.ToString();
}
return System.Net.WebUtility.UrlEncode(stringValue);
}
И, конечно, реализуйте различные проверки нуля и другие улучшения, но вы получите общее представление.Кроме того, что если свойство, в свою очередь, имеет сложный тип?