2010-09-24 3 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“на„Int“»

Я хочу есть количество строк в таблице отеля ..

ответ

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

+1

@developer Я отредактировал, чтобы отразить ваше использование. – rebelliard

Смежные вопросы