Ejemplo n.º 1
0
        public void GetExpressionTest()
        {
            var value = new List <string> {
                "USA", "AUS"
            };
            var operation = new ExpressionBuilder.Operations.In();
            var param     = Expression.Parameter(typeof(Person), "x");
            var parent    = Expression.Property(param, "Birth");
            var member    = Expression.Property(parent, "Country");
            var constant1 = Expression.Constant(value);

            var expression = (MethodCallExpression)operation.GetExpression(member, constant1, null);

            //Testing the operation structure
            expression.Method.Should().BeAssignableTo <MethodInfo>();
            var method = expression.Method as MethodInfo;

            method.Name.Should().Be("Contains");

            var property = expression.Arguments.First() as MemberExpression;

            property.Member.Name.Should().Be("Country");

            var constant = (ConstantExpression)expression.Object;

            constant.Value.Should().Be(value);

            //Testing the operation execution
            var lambda   = Expression.Lambda <Func <Person, bool> >(expression, param);
            var people   = TestData.People.Where(lambda.Compile());
            var solution = TestData.People.Where(x => value.Contains(x.Birth.Country));

            people.Should().BeEquivalentTo(solution);
        }
Ejemplo n.º 2
0
        public void GetExpressionWithNonListConstant_Failure()
        {
            var value     = "USA";
            var operation = new ExpressionBuilder.Operations.In();
            var param     = Expression.Parameter(typeof(Person), "x");
            var parent    = Expression.Property(param, "Birth");
            var member    = Expression.Property(parent, "Country");
            var constant1 = Expression.Constant(value);

            var ex = Assert.Throws <ArgumentException>(() => operation.GetExpression(member, constant1, null));

            ex.Message.Should().Be("The 'In' operation only supports lists as parameters.");
        }
Ejemplo n.º 3
0
        public void ShouldDealNicelyWithListOfNullables()
        {
            var value = new List <long?> {
                123, null
            };
            var operation  = new ExpressionBuilder.Operations.In();
            var param      = Expression.Parameter(typeof(Person), "x");
            var member     = Expression.Property(param, "EmployeeReferenceNumber");
            var constant1  = Expression.Constant(value);
            var expression = (MethodCallExpression)operation.GetExpression(member, constant1, null);

            var lambda   = Expression.Lambda <Func <Person, bool> >(expression, param);
            var people   = TestData.People.Where(lambda.Compile());
            var solution = TestData.People.Where(x => value.Contains(x.EmployeeReferenceNumber));

            people.Should().BeEquivalentTo(solution);
        }