我们有一个查询,根据另一个的值选择行,即。最大我认为这没有多大意义,所以这是查询:
var deatched = DetachedCriteria.For<Enquiry>("e2")
.SetProjection(Projections.Alias(Projections.Max("Property"), "maxProperty"))
.Add(Restrictions.EqProperty("e2.EnquiryCode", "e.EnquiryCode"));
session.CreateCriteria(typeof(Enquiry), "e")
.Add(Subqueries.PropertyEq("Property", deatched))
.AddOrder(Order.Asc("EnquiryCode"));
我的问题是,这是最好的方法吗?任何人都可以提出更好的方法吗?
答案 0 :(得分:1)
对于聚合,最好使用SQL而不是HQL。使用Nhibernate仅用于主要实体及其关系(非常易于维护的设计)。存储过程是这些聚合和函数的更好位置,因为它们是数据相关的而不是对象依赖的
答案 1 :(得分:1)
你应该可以通过投影来做到这一点:
session.CreateCriteria(typeof(Customer))
.SetProjection( Projections.Max("Id") )
.UniqueResult();
答案 2 :(得分:0)
我认为这必须奏效:
(from e in NHibernateSession().Query<Enquiry>()
where e.Property == (
(
from e2 NHibernateSession().Query<Enquiry>()
where e2.EnqueryCode == e.EnquiryCode
select e2.Property).Max()
)
select e
).ToList<Enquiry>()