diff --git a/src/MaksIT.Core/MaksIT.Core.csproj b/src/MaksIT.Core/MaksIT.Core.csproj
index 8fa1c20..f1eb383 100644
--- a/src/MaksIT.Core/MaksIT.Core.csproj
+++ b/src/MaksIT.Core/MaksIT.Core.csproj
@@ -8,7 +8,7 @@
MaksIT.Core
- 1.3.1
+ 1.3.2
Maksym Sadovnychyy
MAKS-IT
MaksIT.Core
diff --git a/src/MaksIT.Core/Webapi/Models/PagedRequest.cs b/src/MaksIT.Core/Webapi/Models/PagedRequest.cs
index db01453..a9c438c 100644
--- a/src/MaksIT.Core/Webapi/Models/PagedRequest.cs
+++ b/src/MaksIT.Core/Webapi/Models/PagedRequest.cs
@@ -15,16 +15,35 @@ public class PagedRequest : RequestModelBase {
if (string.IsNullOrWhiteSpace(Filters))
return x => true; // Returns an expression that doesn't filter anything.
- // Adjust Filters to make Contains, StartsWith, EndsWith, ==, and != case-insensitive
- string adjustedFilters = Filters
- .Replace(".Contains(", ".ToLower().Contains(")
- .Replace(".StartsWith(", ".ToLower().StartsWith(")
- .Replace(".EndsWith(", ".ToLower().EndsWith(")
- .Replace("==", ".ToLower() ==")
- .Replace("!=", ".ToLower() !=");
+ // Get the type of T
+ var type = typeof(T);
- // Ensure values are also transformed to lowercase
- adjustedFilters = Regex.Replace(adjustedFilters, "\"([^\"]+)\"", m => $"\"{m.Groups[1].Value.ToLower()}\"");
+ // Adjust Filters to make Contains, StartsWith, EndsWith, ==, and != case-insensitive
+ string adjustedFilters = Filters;
+
+ // Regex to find property names and methods
+ adjustedFilters = Regex.Replace(adjustedFilters, @"(\w+)\.(Contains|StartsWith|EndsWith)\(\""(.*?)\""\)", m => {
+ var propertyName = m.Groups[1].Value;
+ var method = m.Groups[2].Value;
+ var value = m.Groups[3].Value;
+ var property = type.GetProperty(propertyName);
+ if (property != null && property.PropertyType == typeof(string)) {
+ return $"{propertyName}.ToLower().{method}(\"{value.ToLower()}\")";
+ }
+ return m.Value;
+ });
+
+ // Regex to find equality and inequality comparisons
+ adjustedFilters = Regex.Replace(adjustedFilters, @"(\w+)\s*(==|!=)\s*\""(.*?)\""", m => {
+ var propertyName = m.Groups[1].Value;
+ var comparison = m.Groups[2].Value;
+ var value = m.Groups[3].Value;
+ var property = type.GetProperty(propertyName);
+ if (property != null && property.PropertyType == typeof(string)) {
+ return $"{propertyName}.ToLower() {comparison} \"{value.ToLower()}\"";
+ }
+ return m.Value;
+ });
// Parse the adjusted filter string into a dynamic lambda expression
var predicate = DynamicExpressionParser.ParseLambda(