2010-03-22 38 views
26

Tôi đang sử dụng api QueryOver là một phần của NHibernate 3.x. Tôi muốn có được một số hàng, nhưng phương pháp tôi đang sử dụng trả về tất cả các đối tượng và sau đó nhận được số lượng của bộ sưu tập. Có cách nào để chỉ trả lại một số nguyên/giá trị dài của số hàng không?Làm cách nào để nhận số lượng hàng bằng cách sử dụng api QueryOver NHibernate?

Tôi hiện đang sử dụng:

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

Trả lời

38

Sau một chút chơi đùa với các api, điều này sẽ làm điều đó:

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

Nếu bạn không muốn quay trở lại nó như là một trong tương lai, bạn chỉ có thể thay thế SingleOrDefault<int>().

+1

+1, Perfect câu trả lời ... thêm bình luận cũng rất hữu ích. – cyrotello

8

Một phương pháp:

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

Một phương pháp

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

Im sử dụng như thế này:

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

    } 
Các vấn đề liên quan