我有以下两个对象模型:
public class Product
{
public int IdProduct;
public Category IdCategory;
public string Name;
public bool Available;
}
public class Category
{
public int IdCategory;
public string Name;
}
我想要一个所有类别的列表,按列表顶部最常用的类别排序。我想出了以下 NHibernate 查询:
Product productAlias = null;
Category categoryAlias = null;
Category categoryAliasOutput = null;
session.QueryOver<Product>(() => productAlias)
.JoinAlias(p => p.Category, () => categoryAlias, JoinType.RightOuterJoin)
.Select(Projections.ProjectionList()
.Add(Projections.Group(() => categoryAlias.IdCategory).WithAlias(() => categoryAliasOutput.IdCategory))
.Add(Projections.Group(() => categoryAlias.Name).WithAlias(() => categoryAliasOutput.Name))
.Add(Projections.Count(() => productAlias.IdCategory.IdCategory)))
.OrderBy(Projections.Count(() => productAlias.IdCategory.IdCategory)).Desc
.ThenBy(Projections.Property(() => categoryAlias.Name)).Asc
.TransformUsing(Transformers.AliasToBean<Category>())
.List<Category>();
这可行,但我正在寻找一种简化代码的方法,因为它看起来有点难看。这也是一个简化的例子。就我而言,我正在处理具有更多属性的对象,这些属性都必须添加到 ProjectionList 中。
我不能使用“Transformers.RootEntity”,因为根实体属于“产品”类型,结果必须是“类别”类型的列表。