Beispiel #1
0
    public static Expression <Func <T, bool> > AddContains <T>(this LambdaExpression selector, string value)
    {
        var mi = typeof(string).GetMethods().First(m => m.Name == "Contains" && m.GetParameters().Length == 1);

        var body           = selector.GetBody().AsString();
        var x              = Expression.Call(body, mi, Expression.Constant(value));
        LambdaExpression e = Expression.Lambda(x, selector.Parameters.ToArray());

        return((Expression <Func <T, bool> >)e);
    }
            public LambdaExpression GetAssociationQueryExpressionAsSubQuery(Expression dataContextExpr, LambdaExpression queryMethod)
            {
                var parentParameter = queryMethod.Parameters[0];

                var body = queryMethod.GetBody(parentParameter, dataContextExpr);

                body = Expression.Convert(body, typeof(IEnumerable <>).MakeGenericType(ObjectType));

                return(Expression.Lambda(body, parentParameter));
            }
Beispiel #3
0
        public RecordReaderBuilder(IDataContext dataContext, Type objectType, IDataReader reader, LambdaExpression?converterExpr)
        {
            DataContext   = dataContext;
            MappingSchema = dataContext.MappingSchema;
            OriginalType  = objectType;
            ObjectType    = objectType;
            Reader        = reader;
            ReaderIndexes = Enumerable.Range(0, reader.FieldCount).ToDictionary(reader.GetName, i => i, MappingSchema.ColumnNameComparer);

            var typedDataReader = Expression.Convert(DataReaderParam, reader.GetType());

            DataReaderLocal = BuildVariable(converterExpr?.GetBody(typedDataReader) ?? typedDataReader, "ldr");
        }
            public Expression GetAssociationQueryExpression(Expression dataContextExpr, Expression parentObjExpression, Type parentType, Expression parentExpression,
                                                            LambdaExpression queryMethod)
            {
                var resultParam = Expression.Parameter(ObjectType);

                var body = queryMethod.GetBody(parentObjExpression ?? queryMethod.Parameters[0], dataContextExpr);

                body        = Expression.Convert(body, typeof(IEnumerable <>).MakeGenericType(ObjectType));
                queryMethod = Expression.Lambda(body, queryMethod.Parameters[0]);

                var selectManyMethodInfo = _selectManyMethodInfo.MakeGenericMethod(parentType, ObjectType, ObjectType);
                var resultLamba          = Expression.Lambda(resultParam, Expression.Parameter(parentType), resultParam);
                var selectManyMethod     = Expression.Call(null, selectManyMethodInfo, parentExpression, queryMethod, resultLamba);

                return(selectManyMethod);
            }