Come selezionare solo poche colonne nella mia query NHibernate?

Come selezionare solo poche colonne nella mia query NHibernate?

Facile da fare con LINQ (supponendo che tu stia utilizzando NHibernate 3.0 o successivo):

var products = from p in Session.Query<Product>()
               where // ...some query (snip)
               select new
               {
                   Name = p.ProductName,
                   Description = p.ShortDesc,
                   Price = p.Price,
                   Units = p.Quantity
               };

Inoltre, se stai usando HQL, puoi semplicemente selezionare le colonne che ti servono in modo simile all'utilizzo di T-SQL, ma usa un Transformer per recuperare un oggetto fortemente tipizzato:

Per prima cosa crea una classe con le tue colonne ristrette:

public class ProductReport
{
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public int Units { get; set; }
}

Quindi la tua domanda:

string hql = "select p.ProductName as Name, p.ShortDesc as Description ...(snip) " +
             "from Product p " +
             "where ...some query (snip)";

IQuery query = Session.CreateQuery(hql)
    .SetResultTransformer(Transformers.AliasToBean<ProductReport>());

IList<ProductReport> products = query.List<ProductReport>();

Assicurati solo che gli alias nella tua query (come Nome, come Descrizione ecc.) corrispondano ai nomi delle proprietà nella tua classe.


Oltre all'esempio fornito da Tim, puoi fare qualcosa del genere:

IList selection =
    session.QueryOver<Cat>()
        .Select(
            c => c.Name,
            c => c.Age)
        .List<object[]>();

L'esempio sopra è stato preso da:http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx


Usa un ProjectionList per selezionare le colonne desiderate. Vedi qui per gli esempi.