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); }
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 })); }