diff --git a/Sieve/Models/SieveOptions.cs b/Sieve/Models/SieveOptions.cs index f0059ee..a207958 100644 --- a/Sieve/Models/SieveOptions.cs +++ b/Sieve/Models/SieveOptions.cs @@ -9,5 +9,7 @@ public class SieveOptions public int MaxPageSize { get; set; } = 0; public bool ThrowExceptions { get; set; } = false; + + public string CultureNameOfTypeConversion { get; set; } = "en"; } -} \ No newline at end of file +} diff --git a/Sieve/Services/SieveProcessor.cs b/Sieve/Services/SieveProcessor.cs index 5913960..e7109d6 100644 --- a/Sieve/Services/SieveProcessor.cs +++ b/Sieve/Services/SieveProcessor.cs @@ -1,5 +1,6 @@ using System; using System.ComponentModel; +using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Reflection; @@ -169,6 +170,8 @@ private IQueryable ApplyFiltering( return result; } + var cultureInfoToUseForTypeConversion = new CultureInfo(_options.Value.CultureNameOfTypeConversion ?? "en"); + Expression outerExpression = null; var parameterExpression = Expression.Parameter(typeof(TEntity), "e"); foreach (var filterTerm in model.GetFiltersParsed()) @@ -193,7 +196,7 @@ private IQueryable ApplyFiltering( { dynamic constantVal = converter.CanConvertFrom(typeof(string)) - ? converter.ConvertFrom(filterTermValue) + ? converter.ConvertFrom(null, cultureInfoToUseForTypeConversion, filterTermValue) : Convert.ChangeType(filterTermValue, property.PropertyType); Expression filterValue = GetClosureOverConstant(constantVal, property.PropertyType);