private void ProcessMerge(StringBuilder sb, MergeSegment segment, QueryBuildInfo buildInfo, IDbLayer dbLayer)
        {
            int count = 0;

            if (segment.Mode == MergeSegmentMode.ParaAnd ||
                segment.Mode == MergeSegmentMode.ParaOr)
            {
                sb.Append("(");
            }
            foreach (ISegment subSegment in segment.Segments)
            {
                if (count > 0)
                {
                    switch (segment.Mode)
                    {
                    case MergeSegmentMode.And:
                    case MergeSegmentMode.ParaAnd:
                        sb.Append(" AND ");
                        break;

                    case MergeSegmentMode.ParaOr:
                    case MergeSegmentMode.Or:
                        sb.Append(" OR ");
                        break;
                    }
                }
                Process(sb, subSegment, buildInfo, dbLayer);
                count++;
            }
            if (segment.Mode == MergeSegmentMode.ParaAnd ||
                segment.Mode == MergeSegmentMode.ParaOr)
            {
                sb.Append(")");
            }
        }
示例#2
0
        protected T BaseOr(params T[] expressions)
        {
            MergeSegment mergeSegment;

            if (expressions == null || expressions.Length == 0)
            {
                mergeSegment = new MergeSegment(MergeSegmentMode.Or);
                return(AddSegment(mergeSegment));
            }

            mergeSegment = new MergeSegment(MergeSegmentMode.ParaOr);
            foreach (T expression in expressions)
            {
                mergeSegment.AddSub(expression.RootSegment);
            }
            return(AddSegment(mergeSegment));
        }