Пример #1
0
 /// <summary>
 /// Return customized limit string (for paging queries)
 /// For performance reason the limit string is ommitted when querying the first page.
 /// </summary>
 /// <param name="querySqlString"></param>
 /// <param name="offset"></param>
 /// <param name="last"></param>
 /// <returns></returns>
 public override NHibernate.SqlCommand.SqlString GetLimitString(NHibernate.SqlCommand.SqlString querySqlString, int offset, int last)
 {
     if (!querySqlString.StartsWithCaseInsensitive("select "))
     {
         throw new ArgumentException("querySqlString should start with select", "querySqlString");
     }
     SqlString sqlString = querySqlString.Substring(6);
     string orderSql = querySqlString.SubstringStartingWithLast("order by").ToString();
     if (orderSql.Length != 0)
     {
         sqlString = sqlString.Substring(0, (sqlString.Length - orderSql.Length) - 1);
     }
     SqlStringBuilder builder = new SqlStringBuilder();
     int num = offset + 1;
     builder.Add("SELECT TOP ").Add(last.ToString()).Add(" ").Add(sqlString);
     if(offset > 0)
         builder.Add(" WITH FIRSTROW ").Add(num.ToString());
     if (orderSql.Length > 0)
     {
         builder.Add(" ").Add(orderSql);
     }
     return builder.ToSqlString();
 }