Procházet zdrojové kódy

#gogs_13__2024-01-11_integrateQueryBuilder7
operatorMap

lith před 1 rokem
rodič
revize
d5e9a5f2fe

+ 14 - 0
Test/Vit.Linq.MsTest/QueryBuilder/Queryable_QueryBuilder_Test.cs

@@ -43,7 +43,21 @@ namespace Vit.Linq.MsTest.QueryBuilder
         }
 
 
+        [TestMethod]
+        public void Test_OperatorMap()
+        {
+            {
+                var query = GetQueryable();
+                QueryBuilderService.Instance.AddOperatorMap("Equal", FilterRuleOperator.Equal);
+
 
+                var strRule = "{'field':'isEven',  'operator': 'eQual',  'value':true }".Replace("'", "\"");
+                var rule = Json.Deserialize<FilterRule>(strRule);
+                var result = query.Where(rule).ToList();
+                Assert.AreEqual(result.Count, 500);
+                Assert.AreEqual(0, result[0].id);
+            }
+        }
 
 
 

+ 19 - 1
Vit.Linq.QueryBuilder/QueryBuilderService.cs

@@ -11,11 +11,29 @@ namespace Vit.Linq.QueryBuilder
     {
         public static QueryBuilderService Instance = new QueryBuilderService();
 
-
+        /// <summary>
+        /// operatorName -> operatorType(in class FilterRuleOperator)
+        /// </summary>
         public Dictionary<string, string> operatorMap = new Dictionary<string, string>();
         public bool operatorIsIgnoreCase = true;
         public bool ignoreError = false;
 
+        public QueryBuilderService AddOperatorMap(string operatorName, string operatorType)
+        {
+            if (operatorIsIgnoreCase) operatorName = operatorName?.ToLower();
+            operatorMap[operatorName] = operatorType;
+            return this;
+        }
+
+        public QueryBuilderService AddOperatorMap(IEnumerable<(string operatorName, string operatorType)> maps)
+        {
+            foreach (var map in maps)
+                AddOperatorMap(map.operatorName, map.operatorType);
+            return this;
+        }
+
+
+
         public Func<T, bool> ToPredicate<T>(IFilterRule rule)
         {
             return ToExpression<T>(rule)?.Compile();