public static Expression <Func <PrimaryKey, string> > GetToString <T>(CachedTableConstructor constructor, Expression <Func <T, string> > lambda)
        {
            Table table = (Table)constructor.table;

            var param = lambda.Parameters.SingleEx();

            if (param.Type != table.Type)
            {
                throw new InvalidOperationException("incorrect lambda paramer type");
            }

            var pk = Expression.Parameter(typeof(PrimaryKey), "pk");

            var root = new CachedEntityExpression(pk, typeof(T), constructor, null, null);

            var visitor = new ToStringExpressionVisitor(param, root);

            var result = visitor.Visit(lambda.Body);

            return(Expression.Lambda <Func <PrimaryKey, string> >(result, pk));
        }
Esempio n. 2
0
            public static Expression GetToString(Table table, ParameterExpression reader, List <IColumn> columns)
            {
                LambdaExpression lambda = ExpressionCleaner.GetFieldExpansion(table.Type, CachedTableBase.ToStringMethod) !;

                if (lambda == null)
                {
                    columns.Add(table.ToStrColumn !);

                    return(FieldReader.GetExpression(reader, columns.Count - 1, typeof(string)));
                }

                ToStringExpressionVisitor toStr = new ToStringExpressionVisitor(
                    lambda.Parameters.SingleEx(),
                    reader,
                    columns,
                    table
                    );

                var result = toStr.Visit(lambda.Body);

                return(result);
            }