2010-03-22 16 views
26

Sto usando l'API QueryOver che fa parte di NHibernate 3.x. Mi piacerebbe ottenere un conteggio delle righe, ma il metodo che sto usando restituisce tutti gli oggetti e quindi ottiene il conteggio della raccolta. C'è un modo per restituire semplicemente un numero intero/valore lungo del numero di righe?Come ottengo il conteggio delle righe usando l'API di Quibover di NHibernate?

Attualmente sto usando:

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

risposta

38

Dopo un po 'di giocare con l'API, questo lo farà:

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

Se non si desidera tornare come un futuro, puoi semplicemente prendere il SingleOrDefault<int>().

+1

+1, risposta perfetta ... commento in più anche utile. – cyrotello

8

Un altro metodo:

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

Un altro metodo

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

Im usando in questo modo:

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

    } 
Problemi correlati