我目前正在尝试从手工制作的hql转移到通过DetachedCriteria构建的查询。我有和HQL:在nHibernate中使用DetachedCriteria的复杂查询
from GenericObject genericObject
left join fetch genericObject.Positions positions
where (positions.Key.TrackedSourceID, positions.Key.PositionTimestamp) in
(select gp.Key.TrackedSourceID, max(gp.Key.PositionTimestamp)
from GenericPosition gp
group by gp.Key.TrackedSourceID)
现在使用的DetachedCriteria:
var subquery = DetachedCriteria
.For (typeof (GenericPosition), "gp")
.SetProjection (Projections.ProjectionList()
.Add (Projections.Property ("gp.Key.TrackedSourceID"))
.Add (Projections.Max ("gp.Key.PositionTimestamp"))
.Add (Projections.GroupProperty ("gp.Key.TrackedSourceID"))
);
var criteriaQuery = DetachedCriteria
.For (typeof (GenericObject), "genericObject")
.CreateAlias ("genericObject.Positions", "positions")
.SetFetchMode ("genericObject.Positions", FetchMode.Eager)
.Add (Subqueries.In (??, subquery))
我不知道是什么,而不是类型的?以创建表达式(positions.Key.TrackedSourceID,positions.Key.PositionTimestamp)
嗯,你是对的。但是,我正在动态创建此查询,并调用方法将某些内容附加到查询中。查询结束后,我需要为参数添加值,而且它非常不雅 - DetachedCriteria在这里看起来更好。 – paszczi 2009-02-13 12:28:06
你是对的,我希望你的问题会有答案,...我发现自己在类似的情况... – 2010-02-26 07:46:48