У меня есть пользовательский интерфейс, в котором пользователь может выбрать столбец сетки (например, возраст) и оператор (меньше, равно или больше) для этого столбца.
Затем данные сетки фильтруются в соответствии с выбором.
У меня есть следующие классы, которые десериализованы из JSON, который приходит от клиента.
/// <summary>
/// Filter for reducing grid results
/// </summary>
public class Filter
{
/// <summary>
/// Name of the column
/// </summary>
public string name;
public string value;
public int @operator { private get; set; }
public Operator Operator()
{
return (Operator) @operator;
}
}
public enum Operator
{
None = -1,
LesserThan = 0,
Equals = 1,
GreaterThan = 2
}
Из-за природы, динамически добавляющей новые столбцы для фильтрации, я хотел бы создать общее решение длядоступ к данным.
Я бы хотел избежать огромного количества операторов if / switch типа
switch(columnName)
{
case "age":
{
if(operator == Operator.LesserThan)
{
query = entities.Where(o => o.Age < age);
}
else if (operator == Operator.GreaterThan)
{
query = entities.Where(o => o.Age > age);
}
etc.
break;
}
etc.
}
Есть идеи, как создать более общее решение для проблемы?
Обновление Кажется, что есть много способов добиться более чистого решения, чем один миллиард операторов if.Теперь мне просто нужно сравнить разные решения.