|
@@ -1,83 +1,55 @@
|
|
|
-using System.Linq;
|
|
|
-using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
+using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
+
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Reflection;
|
|
|
|
|
|
-using Vit.Core.Module.Serialization;
|
|
|
using Vit.Linq.QueryBuilder;
|
|
|
-using Vit.Extensions.Linq_Extensions;
|
|
|
|
|
|
namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
{
|
|
|
- [TestClass]
|
|
|
- public class Queryable_QueryBuilder_Test
|
|
|
- {
|
|
|
|
|
|
+ public abstract class Filter_TestBase<Query>
|
|
|
+ {
|
|
|
IQueryable<ModelA> GetQueryable() => DataSource.GetQueryable();
|
|
|
|
|
|
|
|
|
- [TestMethod]
|
|
|
- public void Test_ToList()
|
|
|
- {
|
|
|
- var query = GetQueryable();
|
|
|
-
|
|
|
- #region Count ToList ToArray
|
|
|
- {
|
|
|
+ public abstract IFilterRule GetRule(string filterRule);
|
|
|
+ public abstract Query ToQuery(IQueryable<ModelA> query);
|
|
|
|
|
|
- int count = query.Count();
|
|
|
- Assert.AreEqual(1000, count);
|
|
|
+ public abstract List<ModelA> Filter(Query query, IFilterRule rule);
|
|
|
|
|
|
|
|
|
- var list1 = query.ToList<ModelA>();
|
|
|
- Assert.AreEqual(1000, list1.Count);
|
|
|
|
|
|
- var list2 = query.ToList();
|
|
|
- Assert.AreEqual(1000, list2.Count);
|
|
|
-
|
|
|
-
|
|
|
- var array1 = query.ToArray<ModelA>();
|
|
|
- Assert.AreEqual(1000, array1.Length);
|
|
|
-
|
|
|
- var array2 = query.ToArray();
|
|
|
- Assert.AreEqual(1000, array2.Length);
|
|
|
- }
|
|
|
- #endregion
|
|
|
- }
|
|
|
+ protected void TestFilterRule()
|
|
|
+ {
|
|
|
|
|
|
+ #region #1 [object] IsNull | IsNotNull
|
|
|
|
|
|
- [TestMethod]
|
|
|
- public void Test_OperatorMap()
|
|
|
- {
|
|
|
+ #region ##1 IsNull
|
|
|
{
|
|
|
var query = GetQueryable();
|
|
|
- QueryBuilderService.Instance.AddOperatorMap("Equal", FilterRuleOperator.Equal);
|
|
|
|
|
|
+ var item = query.Skip(10).FirstOrDefault();
|
|
|
+ item.name = null;
|
|
|
|
|
|
- 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);
|
|
|
+ var strRule = "{'field':'name', 'operator': 'IsNull' }".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+ Assert.AreEqual(1, result.Count);
|
|
|
+ Assert.AreEqual(10, result[0].id);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- #region Test_FilterRule
|
|
|
- [TestMethod]
|
|
|
- public void Test_FilterRule()
|
|
|
- {
|
|
|
|
|
|
- #region #1 [object] IsNull | IsNotNull
|
|
|
-
|
|
|
- #region ##1 IsNull
|
|
|
{
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var item = query.Skip(10).FirstOrDefault();
|
|
|
item.name = null;
|
|
|
|
|
|
- var strRule = "{'field':'name', 'operator': 'IsNull' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var strRule = "{'field':'name', 'operator': '=', 'value': null }".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
Assert.AreEqual(10, result[0].id);
|
|
|
}
|
|
@@ -91,8 +63,20 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
item.name = null;
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'IsNotNull' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+ Assert.AreEqual(999, result.Count);
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ var query = GetQueryable();
|
|
|
+
|
|
|
+ var item = query.Skip(10).FirstOrDefault();
|
|
|
+ item.name = null;
|
|
|
+
|
|
|
+ var strRule = "{'field':'name', 'operator': '!=', 'value': null }".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(999, result.Count);
|
|
|
}
|
|
|
#endregion
|
|
@@ -109,8 +93,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'id', 'operator': '=', 'value':10 }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
Assert.AreEqual(10, result[0].id);
|
|
|
}
|
|
@@ -120,8 +104,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'id', 'operator': '=', 'value': '10' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
Assert.AreEqual(10, result[0].id);
|
|
|
}
|
|
@@ -135,9 +119,9 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
item.pid = null;
|
|
|
|
|
|
var strRule = "{'field':'pid', 'operator': '=', 'value': null }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).FirstOrDefault();
|
|
|
- Assert.AreEqual(10, result.id);
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+ Assert.AreEqual(10, result.FirstOrDefault().id);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -151,8 +135,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'isEven', 'operator': '=', 'value':true }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(result.Count, 500);
|
|
|
Assert.AreEqual(0, result[0].id);
|
|
|
}
|
|
@@ -162,8 +146,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'isEven', 'operator': '=', 'value': 'false' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(result.Count, 500);
|
|
|
Assert.AreEqual(1, result[0].id);
|
|
|
}
|
|
@@ -177,8 +161,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'id', 'operator': '!=', 'value':10 }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(999, result.Count);
|
|
|
}
|
|
|
|
|
@@ -190,8 +174,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
item.pid = null;
|
|
|
|
|
|
var strRule = "{'field':'pid', 'operator': '!=', 'value': null }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(999, result.Count);
|
|
|
}
|
|
|
}
|
|
@@ -204,8 +188,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'isEven', 'operator': '!=', 'value':true }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(result.Count, 500);
|
|
|
Assert.AreEqual(1, result[0].id);
|
|
|
}
|
|
@@ -215,8 +199,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'isEven', 'operator': '!=', 'value': 'false' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(result.Count, 500);
|
|
|
Assert.AreEqual(0, result[0].id);
|
|
|
}
|
|
@@ -233,8 +217,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
{'field':'id', 'operator': '>', 'value':10 },
|
|
|
{'field':'id', 'operator': '<', 'value': '20' }
|
|
|
]}".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(9, result.Count);
|
|
|
Assert.AreEqual(11, result[0].id);
|
|
|
}
|
|
@@ -251,8 +235,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
{'field':'id', 'operator': '>=', 'value':10 },
|
|
|
{'field':'id', 'operator': '<=', 'value': '20' }
|
|
|
]}".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(11, result.Count);
|
|
|
Assert.AreEqual(10, result[0].id);
|
|
|
}
|
|
@@ -270,8 +254,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'id', 'operator': 'In', 'value': [3,4,5] }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(3, result.Count);
|
|
|
Assert.AreEqual(5, result[2].id);
|
|
|
}
|
|
@@ -280,22 +264,34 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'In', 'value': [ 'name3', 'name4'] }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(2, result.Count);
|
|
|
Assert.AreEqual("name3", result[0].name);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var query = GetQueryable();
|
|
|
- query.FirstOrDefault().name = null;
|
|
|
+ query.First().name = null;
|
|
|
|
|
|
var strRule = @"{'condition':'or', 'rules':[
|
|
|
{'field':'name', 'operator': 'IsNull' },
|
|
|
{'field':'name', 'operator': 'In', 'value': [ 'name3', 'name4'] }
|
|
|
]}".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+ Assert.AreEqual(3, result.Count);
|
|
|
+ Assert.AreEqual(null, result[0].name);
|
|
|
+ Assert.AreEqual("name4", result[2].name);
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ var query = GetQueryable();
|
|
|
+ query.First().name = null;
|
|
|
+
|
|
|
+ var strRule = @"{'field':'name', 'operator': 'In', 'value': [ 'name3', 'name4', null ] }".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(3, result.Count);
|
|
|
Assert.AreEqual(null, result[0].name);
|
|
|
Assert.AreEqual("name4", result[2].name);
|
|
@@ -312,8 +308,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
{'field':'name', 'operator': 'IsNotNull' },
|
|
|
{'field':'name', 'operator': 'NotIn', 'value': [ 'name3', 'name4'] }
|
|
|
]}".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(997, result.Count);
|
|
|
}
|
|
|
#endregion
|
|
@@ -328,8 +324,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'Contains', 'value': '987' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
Assert.AreEqual(987, result.First().id);
|
|
@@ -343,8 +339,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'NotContains', 'value': '987' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(999, result.Count);
|
|
|
}
|
|
|
|
|
@@ -355,8 +351,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
query.Skip(987).FirstOrDefault().name = null;
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'NotContains', 'value': '987' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(1000, result.Count);
|
|
|
}
|
|
|
|
|
@@ -366,8 +362,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
query.Skip(987).FirstOrDefault().name = "";
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'NotContains', 'value': '987' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
Assert.AreEqual(1000, result.Count);
|
|
|
}
|
|
|
}
|
|
@@ -378,8 +374,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'StartsWith', 'value': 'name98' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(11, result.Count);
|
|
|
}
|
|
@@ -390,8 +386,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
var query = GetQueryable();
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'EndsWith', 'value': '987' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
}
|
|
@@ -405,8 +401,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
query.Skip(10).FirstOrDefault().name = null;
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'IsNullOrEmpty' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
|
|
@@ -418,8 +414,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
query.Skip(10).FirstOrDefault().name = "";
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'IsNullOrEmpty' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
}
|
|
@@ -434,8 +430,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
query.Skip(10).FirstOrDefault().name = null;
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'IsNotNullOrEmpty' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(999, result.Count);
|
|
|
}
|
|
@@ -445,8 +441,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
query.Skip(10).FirstOrDefault().name = "";
|
|
|
|
|
|
var strRule = "{'field':'name', 'operator': 'IsNotNullOrEmpty' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(999, result.Count);
|
|
|
}
|
|
@@ -457,13 +453,78 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
- #region #5 nested field
|
|
|
+ #region #5 DateTime
|
|
|
+ {
|
|
|
+ // ##1 string =
|
|
|
+ {
|
|
|
+ var query = GetQueryable();
|
|
|
+ var model = query.Skip(100).First();
|
|
|
+ var strTime = model.addTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+ model.addTime = DateTime.Parse(strTime);
|
|
|
+ var strRule = $"{{'field':'addTime', 'operator': '=', 'value': '{strTime}' }}".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+
|
|
|
+ var model2 = result.First();
|
|
|
+ Assert.AreEqual(1, result.Count);
|
|
|
+ Assert.AreEqual(model.id, model2.id);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ##2 string <
|
|
|
+ {
|
|
|
+ var query = GetQueryable();
|
|
|
+ var model = query.Skip(100).First();
|
|
|
+ var strTime = model.addTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+ model.addTime = DateTime.Parse(strTime);
|
|
|
+ var strRule = $"{{'field':'addTime', 'operator': '<', 'value': '{strTime}' }}".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+
|
|
|
+ Assert.AreEqual(100, result.Count);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // ##3 DateTime =
|
|
|
+ {
|
|
|
+ var query = GetQueryable();
|
|
|
+ var model = query.Skip(100).First();
|
|
|
+ var strRule = $"{{'field':'addTime', 'operator': '=' }}".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ rule.value = model.addTime;
|
|
|
+
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+
|
|
|
+ var model2 = result.First();
|
|
|
+ Assert.AreEqual(1, result.Count);
|
|
|
+ Assert.AreEqual(model.id, model2.id);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ##4 DateTime <
|
|
|
+ {
|
|
|
+ var query = GetQueryable();
|
|
|
+ var model = query.Skip(100).First();
|
|
|
+ var strRule = $"{{'field':'addTime', 'operator': '<' }}".Replace("'", "\"");
|
|
|
+ var rule = GetRule(strRule);
|
|
|
+ rule.value = model.addTime;
|
|
|
+
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
+
|
|
|
+ Assert.AreEqual(100, result.Count);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ #region #6 nested field
|
|
|
{
|
|
|
var query = GetQueryable();
|
|
|
var strRule = "{'field':'b1.name', 'operator': '=', 'value': 'name987_b1' }".Replace("'", "\"");
|
|
|
- var rule = Json.Deserialize<FilterRule>(strRule);
|
|
|
+ var rule = GetRule(strRule);
|
|
|
|
|
|
- var result = query.Where(rule).ToList();
|
|
|
+ var result = Filter(ToQuery(query), rule);
|
|
|
|
|
|
Assert.AreEqual(1, result.Count);
|
|
|
Assert.AreEqual(987, result[0].id);
|
|
@@ -472,10 +533,8 @@ namespace Vit.Linq.MsTest.QueryBuilder
|
|
|
|
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
-
|
|
|
-
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+
|