Эх сурвалжийг харах

StringOperators will check null not String.IsNullOrEmpty

Lith 6 сар өмнө
parent
commit
967e82041b

+ 5 - 0
doc/ReleaseNotes.md

@@ -1,5 +1,10 @@
 # Vit.Linq ReleaseNotes
 
+-----------------------
+# 3.1.5
+- FilterService.checkNullForString = true;
+- StringOperators will check null not String.IsNullOrEmpty
+
 -----------------------
 # 3.1.4
 - FilterService.checkNullForString = false;

+ 1 - 1
src/Versions.props

@@ -1,6 +1,6 @@
 <Project>
     <PropertyGroup>
-        <Version>3.1.4</Version>
+        <Version>3.1.5</Version>
     </PropertyGroup>
 
     <PropertyGroup>

+ 16 - 8
src/Vit.Linq/FilterRules/FilterConvertor/OperatorConvert/StringOperatorConvertor.cs

@@ -21,10 +21,12 @@ namespace Vit.Linq.FilterRules.FilterConvertor.OperatorConvert
                 var leftValueType = arg.leftValueType;
                 var rightValueExpression = arg.filterService.GetRightValueExpression(arg.filter, arg.parameter, leftValueType);
 
-                var nullCheck = Expression.Call(typeof(string), "IsNullOrEmpty", null, leftValueExpression);
+                var nullValue = Expression.Constant(null, leftValueType);
+                var equalNull = Expression.Equal(leftValueExpression, nullValue);
+
                 var contains = Expression.Call(leftValueExpression, "Contains", null, rightValueExpression);
 
-                return (true, Expression.AndAlso(Expression.Not(nullCheck), contains));
+                return (true, Expression.AndAlso(Expression.Not(equalNull), contains));
             }
             else if (RuleOperator.NotContain.Equals(arg.Operator, arg.comparison))
             {
@@ -32,10 +34,12 @@ namespace Vit.Linq.FilterRules.FilterConvertor.OperatorConvert
                 var leftValueType = arg.leftValueType;
                 var rightValueExpression = arg.filterService.GetRightValueExpression(arg.filter, arg.parameter, leftValueType);
 
-                var nullCheck = Expression.Call(typeof(string), "IsNullOrEmpty", null, leftValueExpression);
+                var nullValue = Expression.Constant(null, leftValueType);
+                var equalNull = Expression.Equal(leftValueExpression, nullValue);
+
                 var contains = Expression.Call(leftValueExpression, "Contains", null, rightValueExpression);
 
-                return (true, Expression.OrElse(nullCheck, Expression.Not(contains)));
+                return (true, Expression.OrElse(equalNull, Expression.Not(contains)));
             }
             else if (RuleOperator.StartsWith.Equals(arg.Operator, arg.comparison))
             {
@@ -43,10 +47,12 @@ namespace Vit.Linq.FilterRules.FilterConvertor.OperatorConvert
                 var leftValueType = arg.leftValueType;
                 var rightValueExpression = arg.filterService.GetRightValueExpression(arg.filter, arg.parameter, leftValueType);
 
-                var nullCheck = Expression.Not(Expression.Call(typeof(string), "IsNullOrEmpty", null, leftValueExpression));
+                var nullValue = Expression.Constant(null, leftValueType);
+                var equalNull = Expression.Equal(leftValueExpression, nullValue);
+
                 var startsWith = Expression.Call(leftValueExpression, "StartsWith", null, rightValueExpression);
 
-                return (true, Expression.AndAlso(nullCheck, startsWith));
+                return (true, Expression.AndAlso(Expression.Not(equalNull), startsWith));
             }
             else if (RuleOperator.EndsWith.Equals(arg.Operator, arg.comparison))
             {
@@ -54,10 +60,12 @@ namespace Vit.Linq.FilterRules.FilterConvertor.OperatorConvert
                 var leftValueType = arg.leftValueType;
                 var rightValueExpression = arg.filterService.GetRightValueExpression(arg.filter, arg.parameter, leftValueType);
 
-                var nullCheck = Expression.Not(Expression.Call(typeof(string), "IsNullOrEmpty", null, leftValueExpression));
+                var nullValue = Expression.Constant(null, leftValueType);
+                var equalNull = Expression.Equal(leftValueExpression, nullValue);
+
                 var endsWith = Expression.Call(leftValueExpression, "EndsWith", null, rightValueExpression);
 
-                return (true, Expression.AndAlso(nullCheck, endsWith));
+                return (true, Expression.AndAlso(Expression.Not(equalNull), endsWith));
             }
             else if (RuleOperator.IsNullOrEmpty.Equals(arg.Operator, arg.comparison))
             {

+ 2 - 2
src/Vit.Linq/FilterRules/FilterService.cs

@@ -19,9 +19,9 @@ namespace Vit.Linq.FilterRules
         public bool operatorIsIgnoreCase = true;
 
         /// <summary>
-        /// if true, will add IsNullOrEmpty check for string type for StringOperators like: Contains/NotContain/StartsWith/EndsWith
+        /// if true (default) , will add null check (==null) to StringOperators like: Contains/NotContain/StartsWith/EndsWith
         /// </summary>
-        public virtual bool checkNullForString { get; set; } = false;
+        public virtual bool checkNullForString { get; set; } = true;
 
         public virtual Expression ConvertToCode(ParameterExpression parameter, IFilterRule rule)
         {