public override void SchemaCompleted() { toStrGetterExpression = ToStringExpressionVisitor.GetToString <T>(this.Constructor, s => s.ToString()); toStrGetter = toStrGetterExpression.Compile(); if (this.subTables != null) { foreach (var item in this.subTables) { item.SchemaCompleted(); } } }
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)); }