2010-03-22 9 views
26

Estoy usando la API QueryOver que forma parte de NHibernate 3.x. Me gustaría obtener un recuento de filas, pero el método que estoy utilizando devuelve todos los objetos y luego obtiene el recuento de la colección. ¿Hay alguna manera de simplemente devolver un valor entero/largo del número de filas?¿Cómo obtengo el recuento de filas con la aplicación NHibernate QueryOver?

actualmente estoy usando:

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

Respuesta

38

Después de un poco de jugar un poco con el API, esto lo hará:

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

Si no quiere devolverlo como una futuro, puede obtener el SingleOrDefault<int>() en su lugar.

+1

+1, respuesta perfecta ... comentario adicional también útiles. – cyrotello

8

Otro método:

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

Otro método

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

Im usando la siguiente manera:

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

    } 
Cuestiones relacionadas