예제 #1
0
        virtual public IEnumerable <string> GetIterationStatements(AggregateFunctionContext context, IList <AggregateExpressionPathItem> pathItems)
        {
            AggregateExpressionPathItem lastPathItem = pathItems[pathItems.Count - 1];
            string finalTarget = "";

            foreach (AggregateExpressionPathItem pathItem in pathItems)
            {
                if (pathItem.IsCollection)
                {
                    finalTarget = pathItem.Object;
                }
            }

            string finalExpression = context.Member.AggregateMappingDescription.FinalExpression;

            string processedExpression = "";

            if ((string.IsNullOrEmpty(finalExpression) || lastPathItem.IsCollection))
            {
                processedExpression = finalTarget;
            }
            else
            {
                processedExpression = string.Format("{0}.{1}", finalTarget, finalExpression);
            }

            string fullFormat = GetFormatForExecutedExpression(context);

            fullFormat = fullFormat.Replace("FN_OBJ", "{0}");
            fullFormat = fullFormat.Replace("CURR_ITEM", "{1}");

            return(new string[] { string.Format(fullFormat, context.FunctionObjectName, processedExpression) });
        }
        public AggregateFunctionContext(MemberMappingDescriptor member, 
            ClassMappingDescriptor descriptor,
            Type implementationType,
            string functionObjectName,
            IAggregateFunctionCodeGenerator generator)
        {
            m_member = member;
            m_generator = generator;
            m_functionObjectName = functionObjectName;
            m_implementationType = implementationType;
            m_descriptor = descriptor;

            m_pathItems = ExpressionParser.BuildAggregatePathItem(descriptor, member);
            m_sourceItem = m_pathItems[m_pathItems.Count - 1];
        }
        public AggregateFunctionContext(MemberMappingDescriptor member,
                                        ClassMappingDescriptor descriptor,
                                        Type implementationType,
                                        string functionObjectName,
                                        IAggregateFunctionCodeGenerator generator)
        {
            m_member             = member;
            m_generator          = generator;
            m_functionObjectName = functionObjectName;
            m_implementationType = implementationType;
            m_descriptor         = descriptor;

            m_pathItems  = ExpressionParser.BuildAggregatePathItem(descriptor, member);
            m_sourceItem = m_pathItems[m_pathItems.Count - 1];
        }