top 5 不能使用,估计nhibernate里面不支持top语句

解决方案 »

  1.   

    public IList GetTopMN(Type type,string orderbyFields,bool descOrAsc,int m,int n)
    {
    if ( m > n )
    return null;
    IList entities = null;
    ISession session = null;
    try
    {
    session = //...open your nhibernate session
    ICriteria c  = session.CreateCriteria(type);
    if ( descOrAsc )
    c.AddOrder(Order.Desc(orderbyFields));
    else
    c.AddOrder(Order.Asc(orderbyFields));
    entities = c.SetFirstResult(m).SetMaxResults(n-m).List();
    session.Close();
    }
    catch(Exception err)
    {
    throw err;
    }
    finally
    {
    session.Close();
    }
    return entities;
    }
      

  2.   

    public IList ExecuteSQL( string query ) {
       IList result = new ArrayList();
       NHibernate.Cfg.Configuration cfg=new NHibernate.Cfg.Configuration ();
       ISessionFactoryImplementor s = (ISessionFactoryImplementor)cfg.BuildSessionFactory();
       IDbCommand cmd = s.ConnectionProvider.Driver.CreateCommand();
       cmd.CommandText = query;   IDbConnection conn = s.OpenConnection();
       try {
          cmd.Connection = conn;
          IDataReader rs = cmd.ExecuteReader();      while ( rs.Read() ) {
             int fieldCount = rs.FieldCount;
             object[] values = new Object[ fieldCount ];
             for ( int i = 0; i < fieldCount; i ++ )
                values[i] = rs.GetValue(i);
             result.Add( values );
          }
       }
       finally {
          s.CloseConnection(conn);
       }   return result;
    }直接执行sql也成吧
      

  3.   

    nhibernate提供了一个接口IQuery用来设置查询语句、参数等,此接口的实现类为QueryImpl,跟CriteriaImpl一样,不能在nhibernate程序集外直接创建,只能通过session的CreateQuery来取得一个IQuery接口。这里列出IQuery接口的一些方法:
      SetMaxResults:设置返回的最大结果数,可用于分页;
      

  4.   

    如果直接执行sql的话,那还用NHibernate干什么呢?这显然违背了使用O/R Mapping的原则