Esempio n. 1
0
        /// <summary>作为子查询</summary>
        /// <param name="alias">别名,某些数据库可能需要使用as</param>
        /// <returns></returns>
        public SelectBuilder AsChild(String alias = null)
        {
            SelectBuilder t = this;
            // 如果包含排序,则必须有Top,否则去掉
            Boolean hasOrderWithoutTop = !String.IsNullOrEmpty(t.OrderBy) && !ColumnOrDefault.StartsWith("top ", StringComparison.OrdinalIgnoreCase);

            if (hasOrderWithoutTop)
            {
                t         = this.Clone();
                t.OrderBy = null;
            }

            SelectBuilder builder = new SelectBuilder();

            if (String.IsNullOrEmpty(alias))
            {
                builder.Table = String.Format("({0})", t.ToString());
            }
            else
            {
                builder.Table = String.Format("({0}) {1}", t.ToString(), alias);
            }

            // 把排序加载外层
            if (hasOrderWithoutTop)
            {
                builder.OrderBy = this.OrderBy;
            }

            return(builder);
        }
Esempio n. 2
0
        /// <summary>作为子查询</summary>
        /// <param name="alias">别名,某些数据库可能需要使用as</param>
        /// <param name="trimOrder">SqlServer需要转移OrderBy到外层,Oracle则不能</param>
        /// <returns></returns>
        public SelectBuilder AsChild(String alias, Boolean trimOrder)
        {
            var t = this;
            // 如果包含排序,则必须有Top,否则去掉
            var hasOrderWithoutTop = false;

            if (trimOrder)
            {
                hasOrderWithoutTop = !String.IsNullOrEmpty(t.OrderBy) && !ColumnOrDefault.StartsWithIgnoreCase("top ");
            }
            if (hasOrderWithoutTop)
            {
                t         = Clone();
                t.OrderBy = null;
            }

            var builder = new SelectBuilder();

            if (String.IsNullOrEmpty(alias))
            {
                builder.Table = String.Format("({0})", t.ToString());
            }
            else
            {
                builder.Table = String.Format("({0}) {1}", t.ToString(), alias);
            }

            // 把排序加载外层
            if (hasOrderWithoutTop)
            {
                builder.OrderBy = OrderBy;
            }

            builder.Parameters.AddRange(Parameters);

            return(builder);
        }