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)); }
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); }