Я использую Visual Studio 2019. Я делаю фильтр с функцией ниже. Мой результат поиска всегда чувствителен к строковому значению. Для имени сотрудника это будет поиск без учета регистра, поэтому пользователь может вводить прописные или строчные буквы searchValue
. Мой список конвертируется ToList () в AsQueryable ()
list = list.Where(AppendFilters<CustomerApiResponse>(data.filter.filters));
Пожалуйста, смотрите следующую функцию:
protected ExpressionStarter<T> AppendFilters<T>(List<Filter2> filters)
{
var predicate = PredicateBuilder.New<T>();
foreach (var item in filters)
{
predicate = predicate.And(GetExpression<T>(item.field, item.value, item.@operator));
}
return predicate;
}
Вот что я have:
private Expression<Func<T, bool>> GetExpression<T>(string propName, object val, string op)
{
ParameterExpression argParam = Expression.Parameter(typeof(T));
var nameProperty = Expression.Property(argParam, propName);
var opp = EnumExtensions.ParseEnum<KendoOperators>(op).GetDescription();
MethodInfo method = typeof(string).GetMethod(opp, new[] { typeof(string) });
Expression e1;
if (nameProperty.Type == typeof(int))
{
var propertyType = ((PropertyInfo)nameProperty.Member).PropertyType;
var converter = TypeDescriptor.GetConverter(propertyType);
if (!converter.CanConvertFrom(typeof(string)))
throw new NotSupportedException();
var propertyValue = converter.ConvertFrom(val);
var constant = Expression.Constant(propertyValue);
var valueExpression = Expression.Convert(constant, propertyType);
if (op == "neq")
{
e1 = Expression.NotEqual(nameProperty, valueExpression);
}
else
{
e1 = Expression.Equal(nameProperty, valueExpression);
}
}
else
{
var constant = Expression.Constant(val);
e1 = Expression.Call(nameProperty, method, constant);
}
return Expression.Lambda<Func<T, bool>>(e1, argParam);
}
Как изменить приведенный выше код, чтобы сделать фильтр нечувствительным к регистру для поиска любого строкового значения?
Спасибо!