2010-09-24 66 views
0

我是NHibernate的新手,我想從數據庫中獲得一些行數。下面是我的代碼,NHibernate查詢計數

SearchTemplate template = new SearchTemplate(); 
      template.Criteria = DetachedCriteria.For(typeof(hotel)); 
      template.Criteria.Add(Restrictions.Lt("CheckOutDate", SelDate) || Restrictions.Eq("CheckOutDate", SelDate)); 
      template.Criteria.Add(Restrictions.Eq("Canceled", "False")); 
    int count = template.Criteria.SetProjection(Projections.Count("ID")); 

它給了我一個錯誤,當我嘗試編譯應用程序,說 「無法隱式轉換類型‘NHibernate.Criterion.DetachedCriteria’到‘廉政’」

我想有表酒店的行數..

回答

2

你想用GetExecutableCriteria

SearchTemplate template = new SearchTemplate(); 
     template.Criteria = DetachedCriteria.For(typeof(hotel)); 
     template.Criteria.Add(Restrictions.Lt("CheckOutDate", SelDate) || Restrictions.Eq("CheckOutDate", SelDate)); 
     template.Criteria.Add(Restrictions.Eq("Canceled", "False")); 

var count = DoCount(template.Criteria, session /* your session */); 

public long DoCount(DetachedCriteria criteria, ISession session) 
{ 
    return Convert.ToInt64(criteria.GetExecutableCriteria(session) 
        .SetProjection(Projections.RowCountInt64()) 
        .UniqueResult()); 
} 

在一個側面說明,你應該看一看在使用NHibernate.Linq

var result = (from h in Session.Linq<Hotel>() 
      where h.CheckOutDate <= SelDate 
      where h.Canceled != true 
      select h).Count(); 

更多信息here

+0

我會如何在我的情況下使用它。我將如何更改我發佈的上述代碼,以便它使用您提供的功能? – developer 2010-09-24 21:52:57

+1

@developer我編輯以反映您的使用情況。 – rebelliard 2010-09-24 22:37:48