public static List <Structures.ResponsibilitiesReport.ResponsibilitiesReportTableLine> AppendResponsibilitiesReportResult(
            List <Structures.ResponsibilitiesReport.ResponsibilitiesReportTableLine> source,
            System.Collections.Generic.IDictionary <IEntity, string> entitiesWithPresentation,
            string moduleName,
            int responsibilityPriority,
            string sectionName,
            IEntity mainEntity = null)
        {
            if (!entitiesWithPresentation.Any())
            {
                var emptyTableLine = Company.PublicFunctions.Module.CreateResponsibilitiesReportTableLine(moduleName, string.Empty, string.Empty, null);
                emptyTableLine.Responsibility = sectionName;
                emptyTableLine.Priority       = responsibilityPriority;
                source.Add(emptyTableLine);
            }
            foreach (var entityWithPresentation in entitiesWithPresentation)
            {
                var entityName     = entityWithPresentation.Value;
                var entityPriority = entitiesWithPresentation.Count > 1 ? responsibilityPriority + 1 : responsibilityPriority;
                if (Equals(entityWithPresentation.Key, mainEntity) && entitiesWithPresentation.Count > 1)
                {
                    entityName     = string.Format("<b>{0}</b>", entityWithPresentation.Value);
                    entityPriority = responsibilityPriority;
                }

                var newTableLineRecord = Company.PublicFunctions.Module.CreateResponsibilitiesReportTableLine(moduleName,
                                                                                                              sectionName,
                                                                                                              entityName,
                                                                                                              entityWithPresentation.Key);
                newTableLineRecord.Priority = entityPriority;
                source.Add(newTableLineRecord);
            }

            return(source);
        }
        private Expression ConvertDestinationExpressionToSourceExpression(Expression expression)
        {
            // call beforevisitors
            expression = _beforeVisitors.Aggregate(expression, (current, before) => before.Visit(current));

            var typeMap = _mapper.ConfigurationProvider.FindTypeMapFor(typeof(TDestination), typeof(TSource));
            var visitor = new ExpressionMapper.MappingVisitor(_mapper.ConfigurationProvider, typeMap, _destQuery.Expression, _dataSource.Expression, null,
                                                              new[] { typeof(TSource) });
            var sourceExpression = visitor.Visit(expression);

            // apply parameters
            if (_parameters != null && _parameters.Any())
            {
                var constantVisitor = new ExpressionBuilder.ConstantExpressionReplacementVisitor(_parameters);
                sourceExpression = constantVisitor.Visit(sourceExpression);
            }

            // apply null guards in case the feature is enabled
            if (_mapper.ConfigurationProvider.EnableNullPropagationForQueryMapping)
            {
                var nullGuardVisitor = new ExpressionBuilder.NullsafeQueryRewriter();
                sourceExpression = nullGuardVisitor.Visit(sourceExpression);
            }
            // call aftervisitors
            sourceExpression = _afterVisitors.Aggregate(sourceExpression, (current, after) => after.Visit(current));

            return(sourceExpression);
        }
示例#3
0
        public Expression CreateMapExpression(Type sourceType, Type destinationType, System.Collections.Generic.IDictionary <string, object> parameters = null, params MemberInfo[] membersToExpand)
        {
            parameters = parameters ?? new Dictionary <string, object>();

            var cachedExpression =
                _expressionCache.GetOrAdd(new ExpressionRequest(sourceType, destinationType, membersToExpand),
                                          tp => CreateMapExpression(tp, new ConcurrentDictionary <ExpressionRequest, int>()));

            if (!parameters.Any())
            {
                return(cachedExpression);
            }

            var visitor = new ConstantExpressionReplacementVisitor(parameters);

            return(visitor.Visit(cachedExpression));
        }
        /// <summary>
        /// Create an expression tree representing a mapping from the <typeparamref name="TSource"/> type to <typeparamref name="TDestination"/> type
        /// Includes flattening and expressions inside MapFrom member configuration
        /// </summary>
        /// <typeparam name="TSource">Source Type</typeparam>
        /// <typeparam name="TDestination">Destination Type</typeparam>
        /// <param name="mappingEngine">Mapping engine instance</param>
        /// <param name="parameters">Optional parameter object for parameterized mapping expressions</param>
        /// <param name="membersToExpand">Expand members explicitly previously marked as members to explicitly expand</param>
        /// <returns>Expression tree mapping source to destination type</returns>
        public static Expression <Func <TSource, TDestination> > CreateMapExpression <TSource, TDestination>(
            this IMappingEngine mappingEngine, System.Collections.Generic.IDictionary <string, object> parameters = null, params string[] membersToExpand)
        {
            //Expression.const
            parameters = parameters ?? new Dictionary <string, object>();

            var cachedExpression = (Expression <Func <TSource, TDestination> >)
                                   _expressionCache.GetOrAdd(new ExpressionRequest(typeof(TSource), typeof(TDestination), membersToExpand),
                                                             tp => CreateMapExpression(mappingEngine, tp, DictionaryFactory.CreateDictionary <ExpressionRequest, int>()));

            if (!parameters.Any())
            {
                return(cachedExpression);
            }

            var visitor = new ConstantExpressionReplacementVisitor(parameters);

            return((Expression <Func <TSource, TDestination> >)visitor.Visit(cachedExpression));
        }
示例#5
0
 public bool HasDerivedTypesToInclude()
 {
     return(_includedDerivedTypes.Any());
 }