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 void ValueTypeIsNotInCondition()
        {
            var isNotInCondition = new ValueTypeIsNotInCondition <int>();

            var expr1 = isNotInCondition.For <TestSource>(x => x.Id);

            Assert.IsNull(expr1);

            isNotInCondition.Value = new FilterValue <int?>
            {
                Values = new List <int?> {
                    1, 2, 3
                }
            };

            var expr2     = isNotInCondition.For <TestSource>(x => x.Id);
            var expr2Func = expr2.Compile();

            Assert.IsFalse(expr2Func(new TestSource {
                Id = 1
            }));
            Assert.IsTrue(expr2Func(new TestSource {
                Id = 100
            }));

            isNotInCondition.Value = new FilterValue <int?>
            {
                Values = new List <int?> {
                    1, 2, 3, null
                }
            };

            var expr3 = isNotInCondition.For <TestSource>(x => x.Id);

            Assert.IsNotNull(expr3);
        }