Я хочу создать динамический фильтр для своих репозиториев, используя выражения linq, у меня есть другие фильтры, но я не знаю, как создать следующий, используя выражения: (условие взято из здесь )
var result = _studentRepotory.GetAll().Where(s =>
SqlFunctions.StringConvert((double)s.Id).Contains("91")).ToList();
У меня есть метод, который получает значение свойства, propertyName и тип оператора фильтра (enum):
public static class Helper {
public static Expression<Func<T, bool>> GetExpression<T>(object value, string propertyName, FilterOperatorType FilterType)
{
var parameter = Expression.Parameter(typeof(T));
var property = ExpressionUtils.GetPropertyChild(parameter, propertyName);
var constValue = Expression.Constant(value);
BinaryExpression expresion = null;
switch (FilterType)
{
case FilterOperatorType.Equal:
expresion = Expression.Equal(property, constValue);
break;
case FilterOperatorType.Greater:
expresion = Expression.GreaterThan(property, constValue);
break;
case FilterOperatorType.Less:
expresion = Expression.LessThan(property, constValue);
break;
case FilterOperatorType.GreaterOrEqual:
expresion = Expression.GreaterThanOrEqual(property, constValue);
break;
case FilterOperatorType.LessOrEqual:
expresion = Expression.LessThanOrEqual(property, constValue);
break;
}
var lambda = Expression.Lambda<Func<T, bool>>(expresion, parameter);
return lambda;
}
}
Итак, я хочу добавить новый оператортип Содержит , который оценивает, содержит ли целое число несколько цифр, в первом блоке кода, который я делаю, но я хочу сделать это с помощью выражений linq, используя обобщенные значения.
В конце ябудет иметь:
Expression<Func<Student, bool>> where = Helper.GetExpression<Student>("91", "Id", FilterOperatorType.Contains);
var result = _studentRepotory.GetAll().Where(where).ToList();
Запрос должен возвращать всех студентов, когда Id содержит цифры 91.
Пожалуйста, помогите мне и скажите, если вы понимаете.