private static IQueryable <TDbModel> ApplyFilter <TDbModel>(this IQueryable <TDbModel> query, GridFilter filter) where TDbModel : class { GetExpressionPropertyWithParameter(typeof(TDbModel), filter.Field, out _, out var parameter, out var propertyExpression); try { return(filter.FilterMethod switch { FilterMethods.Equal => query.Where(GetDynamicWhereExpression <TDbModel>(Expression.Equal, parameter, propertyExpression, filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.NotEqual => query.Where(GetDynamicWhereExpression <TDbModel>(Expression.NotEqual, parameter, propertyExpression, filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.GreaterThan => query.Where(GetDynamicWhereExpression <TDbModel>(Expression.GreaterThan, parameter, propertyExpression, filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.GreaterOrEqual => query.Where(GetDynamicWhereExpression <TDbModel>( Expression.GreaterThanOrEqual, parameter, propertyExpression, filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.LessThan => query.Where(GetDynamicWhereExpression <TDbModel>(Expression.LessThan, parameter, propertyExpression, filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.LessThanOrEqual => query.Where(GetDynamicWhereExpression <TDbModel>( Expression.LessThan, parameter, propertyExpression, filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.Equals => query.Where(GetStringExpression <TDbModel>(parameter, propertyExpression, nameof(FilterMethods.Equals), filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.Contains => query.Where(GetStringExpression <TDbModel>(parameter, propertyExpression, nameof(FilterMethods.Contains), filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.StartsWith => query.Where(GetStringExpression <TDbModel>(parameter, propertyExpression, nameof(FilterMethods.StartsWith), filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.EndsWith => query.Where(GetStringExpression <TDbModel>(parameter, propertyExpression, nameof(FilterMethods.EndsWith), filter.GetConvertedValueOrNull <TDbModel>())), FilterMethods.Default => query, _ => query }); }