Как сделать фильтр нечувствительным к регистру лямбда-выражений? - PullRequest
0 голосов
/ 12 марта 2020

Я использую 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);
}

Как изменить приведенный выше код, чтобы сделать фильтр нечувствительным к регистру для поиска любого строкового значения?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...