如何使用NHibernate QueryOver api获取行数?

时间:2010-03-22 01:28:38

标签: nhibernate queryover rowcount

我正在使用作为NHibernate 3.x一部分的QueryOver api。我想得到一个行计数,但我正在使用的方法返回所有对象,然后获取集合的计数。有没有办法只返回行数的整数/长值?

我目前正在使用:

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

4 个答案:

答案 0 :(得分:42)

在使用api玩了一下之后,就可以了:

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

如果您不想将其作为未来退回,则可以改为SingleOrDefault<int>()

答案 1 :(得分:33)

另一种方法

var count = Session.QueryOver<Employer>()
    .Where(x => x.EmployerIsActive)
    .RowCount();

答案 2 :(得分:8)

另一种方法:

int employerCount = session
  .QueryOver<Employer>()
  .Where(x => x.EmployerIsActive) // some condition if needed
  .Select(Projections.Count<Employer>(x => x.EmployerId))
  .SingleOrDefault<int>();

答案 3 :(得分:7)

我这样使用:

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

    }