public static void MultipleValueConditions <TProperty>(IDictionary <string, IValueTypeCondition <TProperty> > conditions) where TProperty : struct, IComparable, IComparable <TProperty>, IEquatable <TProperty> { conditions["none"] = new ValueTypeNoneCondition <TProperty>("None"); conditions["isin"] = new ValueTypeIsInCondition <TProperty>("IsIn"); conditions["inotsin"] = new ValueTypeIsNotInCondition <TProperty>("IsNotIn"); conditions["isnull"] = new ValueTypeIsNullCondition <TProperty>("IsNull"); conditions["isnotnull"] = new ValueTypeIsNotNullCondition <TProperty>("IsNotNull"); }
public static void NumericConditions <TProperty>(IDictionary <string, IValueTypeCondition <TProperty> > conditions) where TProperty : struct, IComparable, IComparable <TProperty>, IEquatable <TProperty> { conditions["none"] = new ValueTypeNoneCondition <TProperty>("None"); conditions["equal"] = new ValueTypeEqualCondition <TProperty>("Equal"); conditions["notequal"] = new ValueTypeNotEqualCondition <TProperty>("NotEqual"); conditions["between"] = new BetweenCondition <TProperty>("Between"); conditions["lessthan"] = new LessThanCondition <TProperty>("LessThan"); conditions["greaterthan"] = new GreaterThanCondition <TProperty>("GreaterThan"); conditions["lessthanorequal"] = new LessThanOrEqualCondition <TProperty>("LessThanOrEqual"); conditions["greaterthanorequal"] = new GreaterThanOrEqualCondition <TProperty>("GreaterThanOrEqual"); conditions["isnull"] = new ValueTypeIsNullCondition <TProperty>("IsNull"); conditions["isnotnull"] = new ValueTypeIsNotNullCondition <TProperty>("IsNotNull"); }
public void ValueTypeIsNullCondition() { var isNullCondition = new ValueTypeIsNullCondition <int> { Value = new FilterValue <int?> { LeftValue = 1 } }; var expr1 = isNullCondition.For <TestSource>(x => x.NullableField); Assert.IsFalse(expr1.Compile()(new TestSource { NullableField = 1 })); Assert.IsTrue(expr1.Compile()(new TestSource { NullableField = null })); }
public void ValueTypeConditionBuilder() { var filter = new ValueTypeFilter <User, int>(); filter.For(x => x.Id); filter.Conditions(conditions => { conditions["none"] = new ValueTypeNoneCondition <int>(); conditions["equal"] = new ValueTypeEqualCondition <int>(); conditions["isin"] = new ValueTypeIsInCondition <int>(); conditions["isnull"] = new ValueTypeIsNullCondition <int>(); conditions["isnotnull"] = new ValueTypeIsNullCondition <int>(); }); filter.ConditionBuilder((filterValue, condition, conditionKey) => { var expression = condition(filterValue); if (expression == null) { return(null); } switch (conditionKey) { case "isnotnull": { return(Linq.Expr <Task, bool>(x => x.Users.AsQueryable().Any())); } case "isnull": { return(Linq.Expr <Task, bool>(x => !x.Users.AsQueryable().Any())); } default: //for equal,isin { return(Linq.Expr <Task, bool>(x => x.Users.AsQueryable().Any(expression))); } } }); filter.Init(new FilterValue <int?> { LeftValue = 1, ConditionKey = "equal" }); var expr1 = filter.BuildExpression <User>(); Assert.IsNull(expr1); var epxr2 = filter.BuildExpression <Task>(); Assert.IsNotNull(epxr2); var tasksAnyUserId1 = filter.ApplyFilter(Source); Assert.IsTrue(tasksAnyUserId1.Count() == 1); filter.Init(new FilterValue <int?> { ConditionKey = "isnotnull" }); var tasksAnyUsers = filter.ApplyFilter(Source); Assert.IsTrue(tasksAnyUsers.Count() == 3); filter.Init(new FilterValue <int?> { ConditionKey = "isnull" }); var tasksNotAnyUsers = filter.ApplyFilter(Source); Assert.IsTrue(tasksNotAnyUsers.Count() == 1); filter.Init(new FilterValue <int?> { ConditionKey = "isin", Values = new List <int?> { 1, 5 } }); var tasksIsInUser1User5 = filter.ApplyFilter(Source); Assert.IsTrue(tasksIsInUser1User5.Count() == 2); }