diff --git a/Sieve/Services/SieveProcessor.cs b/Sieve/Services/SieveProcessor.cs index a8403500e66f0c132e747ea6c5e7ef42366be8c3..3d5d49b5fcd1c2c057df4da11cb212082e64d238 100644 --- a/Sieve/Services/SieveProcessor.cs +++ b/Sieve/Services/SieveProcessor.cs @@ -274,6 +274,21 @@ namespace Sieve.Services return fullQueryString; } + protected object ChangeType(object value, Type conversion) + { + var t = conversion; + + if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) + { + if (value == null) + { + return null; + } + + t = Nullable.GetUnderlyingType(t); + } + return Convert.ChangeType(value, t); + } public Expression<Func<TEntity, bool>> GetFilterExpressionQuery<TEntity>( TSieveModel model, bool bCaseSensitive = false) @@ -284,8 +299,9 @@ namespace Sieve.Services if (model?.GetFiltersParsed() == null) { var property = Expression.Property(parameterExpression, "id"); - ConstantExpression constant = Expression.Constant(0, typeof(int)); + ConstantExpression constant = Expression.Constant(this.ChangeType(0, property.Type), property.Type); var rst = Expression.GreaterThan(property, constant); + return Expression.Lambda<Func<TEntity, bool>>(rst, parameterExpression); }