コード例 #1
0
 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
         });
     }