Esempio n. 1
0
        public static Expression AsConstantExpression(this object value, bool parameterised = false)
        {
            if (!parameterised)
            {
                return(Expression.Constant(value));
            }

            var valueType = value.GetType();

            var makeTuple =
                ExpressionEx.Converter(typeof(object), v =>
                                       typeof(Expression).Call("Constant", new Type[] { }, typeof(Tuple).Call("Create", new[] { valueType }, v.CastAs(valueType)))
                                       )
                .Compile()
                .AsConstantExpression();

            var makeConstantExpression =
                ExpressionEx.Converter(typeof(object), v =>
                                       typeof(Expression).Call("Property", new Type[] { }, Expression.Invoke(makeTuple, v), "Item1".AsConstantExpression())
                                       )
                .Compile();

            var res = ((Func <object, MemberExpression>)makeConstantExpression)(value);

            return((Expression)res);
        }
Esempio n. 2
0
        public static IQueryable SelectMany(this IQueryable items, Func <ParameterExpression, Expression> projection)
        {
            var projectionLambda        = ExpressionEx.Converter(items.ElementType, projection);
            var queryableCallExpression = items.CallQueryable("SelectMany", new[] { items.ElementType, projectionLambda.ReturnType.GetEnumerableItemType() }, projectionLambda);
            var projectedQuery          = items.Transform(queryableCallExpression);

            return(projectedQuery);
        }