2010-09-24 72 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