1
我有一個父子表關係:元素 - (1到n) - > ContentBlocks。每個ContentBlock行都有:唯一標識(Id),元素標識,版本以及一些不太相關的字段。我試圖獲取所有具有最高版本號(和Id)的內容行。NHibernate:如何在CreateCriteria中使用「IN」?
我這行SQL的,讓我什麼,我想:
SELECT * FROM ContentBlocks WHERE Id IN
(SELECT MAX(Id) FROM ContentBlocks GROUP BY ElementId)
(假定最新版本具有最高的編號)
然而,我無法弄清楚如何從NHibernate獲取它。這是我得到的最接近的:
var subquery = DetachedCriteria.For<ContentBlock>()
.SetProjection(Projections.Max("Id"))
.SetProjection(Projections.GroupProperty("ElementId"));
var query = session.CreateCriteria<ContentBlock>()
.Add(Subqueries.PropertyIn("Id", subquery)).List<ContentBlock>();
如果我執行子查詢,我得到表中唯一的ElementIds列表。相反,我需要最新的ContentBlocks的ID列表。如果我顛倒了子查詢上SetProjections的順序,我只得到了ElementId的最大值。
我也試過這樣:
subquery = DetachedCriteria.For<ContentBlock>()
.SetProjection(
Projections.ProjectionList()
.Add(Projections.Max("Id"))
.Add(Projections.GroupProperty("ElementId"))
);
但讓我陣列的列表,在這2個元素,標識& ElementId,其中個createCriteria呼叫無法處理。
有沒有辦法在結果中不包含分組屬性「ElementId」?或者指定我想要返回Max(Id)?