public void SimpleUnusableOrTest()
        {
            Expression <Func <Person, Child, bool> > ex =
                (p, c) => p.Id1 == c.ParentId1 || p.DOB == DateTime.MinValue;

            var result = EntityMatchWalker.ExtractKeyNodes(ex, ex.Parameters[0], ex.Parameters[1]);

            Assert.AreEqual(0, result.Item1.Count);
            Assert.AreEqual(0, result.Item2.Count);
        }
        public void ComplexNotNotEqualTest2()
        {
            Expression <Func <Person, Child, bool> > ex =
                (p, c) => !(p.Id1 + 4 != c.ParentId1 + 9) && (p.DOB == DateTime.MinValue || p.DOB == DateTime.MaxValue);

            var result = EntityMatchWalker.ExtractKeyNodes(ex, ex.Parameters[0], ex.Parameters[1]);

            Assert.AreEqual(1, result.Item1.Count);
            Assert.AreEqual(1, result.Item2.Count);
        }
        public void NotNotEqualTest()
        {
            Expression <Func <Person, Child, bool> > ex =
                (p, c) => !(p.Id1 != c.ParentId1);

            var result = EntityMatchWalker.ExtractKeyNodes(ex, ex.Parameters[0], ex.Parameters[1]);

            Assert.AreEqual(1, result.Item1.Count);
            Assert.AreEqual(1, result.Item2.Count);
        }
示例#4
0
        public void KeyExtractionTest()
        {
            //Expression<Func<Person, Order, bool>> exp = (p, o) => p.PersonId == o.PersonId && p.LastName == o.OrderNumber;

            Expression <Func <Person, Order, bool> > exp = (p, o) => p.PersonId == o.PersonId && "S0003456" == o.OrderNumber;

            var result = EntityMatchWalker.ExtractKeyNodes(exp, exp.Parameters.First(), exp.Parameters.ElementAt(1));

            var thisKeys  = result.Item1;
            var otherKeys = result.Item2;
        }
        public void TwoEqualsAndBetweenTest()
        {
            Expression <Func <Person, Child, bool> > ex =
                (p, c) => p.Id1 == c.ParentId1 && p.Id2 == c.ParentId2 &&
                p.DOB >= c.DateStart && p.DOB <= c.DateEnd;

            var result = EntityMatchWalker.ExtractKeyNodes(ex, ex.Parameters[0], ex.Parameters[1]);

            Assert.AreEqual(2, result.Item1.Count);
            Assert.AreEqual(2, result.Item2.Count);

            Assert.AreEqual(typeof(Person).GetProperty(nameof(Person.Id1)), ((MemberExpression)result.Item1[0]).Member);
            Assert.AreEqual(typeof(Person).GetProperty(nameof(Person.Id2)), ((MemberExpression)result.Item1[1]).Member);
            Assert.AreEqual(typeof(Child).GetProperty(nameof(Child.ParentId1)), ((MemberExpression)result.Item2[0]).Member);
            Assert.AreEqual(typeof(Child).GetProperty(nameof(Child.ParentId2)), ((MemberExpression)result.Item2[1]).Member);
        }
        public RelationshipComparer(Expression <Func <TKey, TValue, bool> > expression)
        {
            var keyParam   = expression.Parameters[0];
            var valueParam = expression.Parameters[1];

            var results          = EntityMatchWalker.ExtractKeyNodes(expression, keyParam, valueParam);
            var keyExpressions   = results.Item1;
            var valueExpressions = results.Item2;

            if (results.Item1.Count == 0 || results.Item2.Count == 0)
            {
                IsExpressionInvalid = true;
                return;
            }

            KeyKeyMatcher   = CreateMatchExpression <TKey, TKey>(keyParam, keyExpressions, keyExpressions);
            KeyValueMatcher = expression.Compile();

            KeyHasherFunc   = CreateHashCode <TKey>(keyExpressions, keyParam);
            ValueHasherFunc = CreateHashCode <TValue>(valueExpressions, valueParam);
        }
        public void ComplexEqualsTest()
        {
            Expression <Func <Person, Child, bool> > ex =
                (p, c) => p.Id1 + 3 == c.ParentId1 + 6;

            var result = EntityMatchWalker.ExtractKeyNodes(ex, ex.Parameters[0], ex.Parameters[1]);

            Assert.AreEqual(1, result.Item1.Count);
            Assert.AreEqual(1, result.Item2.Count);

            var func1 = Expression.Lambda <Func <Person, int> >(result.Item1.First(), ex.Parameters[0]).Compile();

            Assert.AreEqual(8, func1(new Person {
                Id1 = 5
            }));

            var func2 = Expression.Lambda <Func <Child, int> >(result.Item2.First(), ex.Parameters[1]).Compile();

            Assert.AreEqual(16, func2(new Child {
                ParentId1 = 10
            }));
        }
        public void EqualsWithMethodTest()
        {
            Expression <Func <Person, Child, bool> > ex =
                (p, c) => p.Name.First() == c.ParentId1.ToString().First();

            var result = EntityMatchWalker.ExtractKeyNodes(ex, ex.Parameters[0], ex.Parameters[1]);

            Assert.AreEqual(1, result.Item1.Count);
            Assert.AreEqual(1, result.Item2.Count);

            var func1 = Expression.Lambda <Func <Person, int> >(result.Item1.First(), ex.Parameters[0]).Compile();

            Assert.AreEqual('W', func1(new Person {
                Name = "William"
            }));

            var func2 = Expression.Lambda <Func <Child, int> >(result.Item2.First(), ex.Parameters[1]).Compile();

            Assert.AreEqual('1', func2(new Child {
                ParentId1 = 1234
            }));
        }