/// <summary>Instructs Moo to map a source expression to the property expression below.</summary> /// <remarks> /// The argument parameter must be a property access expression, such as <c>(t) => t.Name</c>, /// or else an ArgumentException will be thrown. /// </remarks> /// <typeparam name="TInnerTarget">Type of the inner target property.</typeparam> /// <param name="argument">An expression fetching the property to map to.</param> /// <returns>A spec object allowing further fluent setup.</returns> public ISourceSpec <TSource, TTarget> To <TInnerTarget>(Expression <Func <TTarget, TInnerTarget> > argument) { Guard.CheckArgumentNotNull(argument, "argument"); Guard.CheckArgumentNotNull(argument.Body, "argument.Body"); ExpressionHandler.ValidatePropertyExpression(argument); if (UseInnerMapper) { ExpressionHandler.ValidatePropertyExpression(SourceArgument); Mapper.AddInnerMapper <TInnerSource, TInnerTarget>( ExpressionHandler.GetProperty(SourceArgument), ExpressionHandler.GetProperty(argument)); return(new SourceSpec <TSource, TTarget>(Mapper)); } else { Mapper.AddMappingAction( ExpressionHandler.GetMemberName(SourceArgument.Body), ExpressionHandler.GetMemberName(argument.Body), ExpressionHandler.GetAction <TSource, TTarget>(SourceArgument, argument)); return(new SourceSpec <TSource, TTarget>(Mapper)); } }