30

I'm using the QueryOver api that is part of NHibernate 3.x. I would like to get a row count, but the method I'm using returns all objects and then gets the count of the collection. Is there a way to just return an integer/long value of the number of rows?

I'm currently using:

_session.QueryOver<MyObject>().Future().Count()
Guillermo GutiƩrrez
  • 17,273
  • 17
  • 89
  • 116
Jim Geurts
  • 20,189
  • 23
  • 95
  • 116

4 Answers4

45

After a bit of playing around with the api, this will do it:

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

If you don't want to return it as a future, you can just get the SingleOrDefault<int>() instead.

Claudio Redi
  • 67,454
  • 15
  • 130
  • 155
Jim Geurts
  • 20,189
  • 23
  • 95
  • 116
37

Another method

var count = Session.QueryOver<Employer>()
    .Where(x => x.EmployerIsActive)
    .RowCount();
Rafael Mueller
  • 6,028
  • 3
  • 24
  • 28
8

Another method:

int employerCount = session
  .QueryOver<Employer>()
  .Where(x => x.EmployerIsActive) // some condition if needed
  .Select(Projections.Count<Employer>(x => x.EmployerId))
  .SingleOrDefault<int>();
pero
  • 4,169
  • 26
  • 27
7

Im using like this:

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();

    }
Helder Gurgel
  • 590
  • 5
  • 4