Легко сделать с помощью LINQ (при условии, что вы используете NHibernate 3.0 или более позднюю версию):
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
};
Кроме того, если вы используете HQL, вы можете просто выбрать столбцы, которые вам нужны, аналогично использованию T-SQL, но используйте Transformer
для возврата строго типизированного объекта:
Сначала создайте класс с вашими суженными столбцами:
public class ProductReport
{
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public int Units { get; set; }
}
Затем ваш запрос:
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>();
Просто убедитесь, что псевдонимы в вашем запросе (как Имя, как Описание и т. Д.) Соответствуют именам свойств в вашем классе.