2010-03-22 5 views
26

Ich verwende die QueryOver-API, die Teil von NHibernate 3.x ist. Ich möchte eine Zeilenanzahl erhalten, aber die Methode, die ich verwende, gibt alle Objekte zurück und erhält dann die Anzahl der Sammlungen. Gibt es eine Möglichkeit, einen Integer/Long-Wert der Anzahl der Zeilen zurückzugeben?Wie bekomme ich Zeilenanzahl mit dem NHibernate QueryOver API?

Ich bin derzeit mit:

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

Antwort

38

Nach einem wenig Herumspielen mit der api, das wird es tun:

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

Wenn Sie es nicht als ein zurückkehren wollen Zukunft, können Sie nur die SingleOrDefault<int>() stattdessen bekommen.

+1

+1, perfekte Antwort ... Extra Kommentar nützlich. – cyrotello

8

Eine andere Methode:

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

Eine andere Methode

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

Im wie dies mit:

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

    } 
Verwandte Themen