Если вам нужна полная безопасность типов, я не вижу другого способа, кроме как использовать регистр переключателя для сопоставления целого числа с соответствующей категорией:
public List<string> GetProductCategories(int catno)
{
using (var ctx = new myEntities())
{
switch (catno)
{
case 1:
return ctx.Categories.Select(c => c.Category1).ToList();
case 2:
return ctx.Categories.Select(c => c.Category2).ToList();
default:
throw new ArgumentException("Category number not supported!");
}
}
}
Другая вещь, которую вы, очевидно, можете сделать, - это рефакторингваш код, так что у вас есть список классов Category, который содержит ваше строковое свойство, а также число, тогда вы можете написать что-то вроде этого:
return ctx.Categories.Where(c => c.CategoryNumber == catno)
.Select(c => c.CategoryDescription)
.ToList();
Я думаю, что вы, вероятно, должны реорганизовать свой код.Я чувствую плохой дизайн, когда вижу "Category1" и "Category2", звучит так, как будто это должны быть элементы в списке категорий.
Также комментарий о Dynamic Linq, нет ничего плохого в использовании динамического linq, если дляНапример, вы получаете запрос от клиента, который находится вне вашего контроля.Вы можете просто вернуть ошибку, если свойство не найдено.