Как получить количество строк с помощью API-интерфейса NHibernate QueryOver? - PullRequest
29 голосов
/ 22 марта 2010

Я использую API QueryOver, который является частью NHibernate 3.x.Я хотел бы получить количество строк, но метод, который я использую, возвращает все объекты, а затем получает счет коллекции.Есть ли способ просто вернуть целое / длинное значение числа строк?

Я сейчас использую:

_session.QueryOver<MyObject>().Future().Count()

Ответы [ 4 ]

42 голосов
/ 22 марта 2010

После небольшой игры с API, это будет сделано:

_session.QueryOver<MyObject>()
    .Select(Projections.RowCount())
    .FutureValue<int>()
    .Value

Если вы не хотите возвращать его как будущее, вы можете просто получить SingleOrDefault<int>().

33 голосов
/ 05 января 2012

Другой метод

var count = Session.QueryOver<Employer>()
    .Where(x => x.EmployerIsActive)
    .RowCount();
8 голосов
/ 08 июля 2011

Другой метод:

int employerCount = session
  .QueryOver<Employer>()
  .Where(x => x.EmployerIsActive) // some condition if needed
  .Select(Projections.Count<Employer>(x => x.EmployerId))
  .SingleOrDefault<int>();
7 голосов
/ 27 ноября 2012

Я использую вот так:

public int QuantidadeTitulosEmAtraso(Sacado s)
    {
        TituloDesconto titulo = null;
        Sacado sacado = null;

        var titulos =
                _session
                .QueryOver<TituloDesconto>(() => titulo)
                .JoinAlias(() => titulo.Sacado, () => sacado)
                .Where(() => sacado.Id == s.Id)
                .Where(() => titulo.Vencimento <= DateTime.Today)
                .RowCount();

    }
...