Пример #1
0
        /// <inheritdoc />
        public Expression GenerateComparisonExpression(string navigationPropertyName, LinqExpressionListOperator expressionListOperator, ParameterExpression parameter, LambdaExpression lambda)
        {
            // Parse property name
            Expression member     = GenerateMemberExpression(parameter, navigationPropertyName);
            MethodInfo methodInfo = null;

            switch (expressionListOperator)
            {
            case LinqExpressionListOperator.AnyLambda:
                // Get a reference to Enumerable.Any() method
                methodInfo = typeof(Enumerable).GetMethods().First(m => m.Name == "Any" && m.GetParameters().Length == 2);
                break;

            case LinqExpressionListOperator.FirstLambda:
                // Get a reference to Enumerable.First() method
                methodInfo = typeof(Enumerable).GetMethods().First(m => m.Name == "First" && m.GetParameters().Length == 2);
                break;

            default:
                return(null);
            }

            // Create new method and return a call to it
            Type type = parameter.Type.GetProperty(navigationPropertyName)?.PropertyType.GetGenericArguments()[0];

            methodInfo = methodInfo.MakeGenericMethod(type);

            return(Expression.Call(methodInfo, member, lambda));
        }
Пример #2
0
        /// <inheritdoc />
        public Expression GenerateComparisonExpression <T>(NewArrayExpression leftArrayExpression, LinqExpressionListOperator expressionListOperator, LambdaExpression lambda)
        {
            // Get a reference to Enumerable.Any() method
            MethodInfo anyMethodInfo = typeof(Enumerable).GetMethods().First(m => m.Name == "Any" && m.GetParameters().Length == 2);

            // Create new method and return a call to it
            anyMethodInfo = anyMethodInfo.MakeGenericMethod(typeof(T));

            return(expressionListOperator switch
            {
                LinqExpressionListOperator.AnyLambda => Expression.Call(anyMethodInfo, leftArrayExpression, lambda),
                _ => null
            });