Exemplo n.º 1
0
        private CloneDelegate <TEntity> AssembleExpression <TEntity>(IExpressionBuilder expressionBuilder)
            where TEntity : class
        {
            CloneExpressionContext context = new CloneExpressionContext
            {
                SourceEntity = expressionBuilder.AddParameter <TEntity>(nameof(CloneExpressionContext.SourceEntity)),
                CloneFactory = expressionBuilder.AddParameter <ICloneFactory>(nameof(CloneExpressionContext.CloneFactory)),
            };

            if (CollectionTypes.Any(collectionType => IsCollectionType(collectionType, typeof(TEntity))))
            {
                AddCollectionExpressions <TEntity>(expressionBuilder, context);
            }
            else
            {
                AddCloneExpressions <TEntity>(expressionBuilder, context);
            }

            expressionBuilder.ReturnObject(context.TargetEntity);

            return(expressionBuilder.Build <CloneDelegate <TEntity> >());
        }