/// <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); }
/// <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); }