我寫博客TURIST所以第一部分的實體我有兩個實體:相對於1地點和照片很多,所以每到一個地方可以有多個照片,但一張照片屬於一個地點。NHibernate的QueryOver選擇每個組實體
我的目標是創建總結:最後說3位,並與每一個地方,我想有一個照片(例如照片與下位ID,也沒關係)。不僅具有照片的ID,但更多的信息(列),如照片標籤,路徑,照片等是很重要的。
在MS使用SQL 2008 SQL可以通過使用列函數來完成:
select top 3 * from
(
SELECT p.id, p.label, p.VisitDate, ph.id AS photo_id, ph.Label, ph.Path,
RANK() OVER (PARTITION BY p.id ORDER BY ph.id) AS _rank
FROM place AS p INNER JOIN
photo AS ph ON p.id = ph.place_id
) ranked
where _rank = 1
order by VisitDate desc
或者,它可以解決,而排名:
SELECT TOP (3) a.id AS ida, z.id AS idz, z.etykieta, z.sciezka, a.data_odwiedzenia
FROM place AS a INNER JOIN
photo AS z ON a.id = z.id_atrakcji
and z.id in
(
SELECT min(z.id) AS idz
FROM photo z
where z.id_atrakcji in (select top 3 a.id from place a order by a.data_dodania desc)
group by z.id_atrakcji
)
ORDER BY a.data_odwiedzenia DESC
我開始不排名寫這個查詢,但我被困住了。
summaryList =
session.QueryOver(() => placeAlias)
.JoinAlias(o => o.Photos,() => photoAlias)
.SelectList(list => list
.Select(() => placeAlias.Id).WithAlias(() => summaryAlias.PlaceId)
.Select(() => placeAlias.Etykieta).WithAlias(() => summaryAlias.PlaceName)
.Select(() => photoAlias.Etykieta).WithAlias(() => summaryAlias.PhotoLabel)
.Select(() => photoAlias.Id).WithAlias(() => summaryAlias.PhotoId)
)
.OrderByAlias(() => placeAlias.VisitDate).Desc
.WithSubquery.WhereProperty(x => x.Id).In(lastPlaces)
.TransformUsing(Transformers.AliasToBean<PlacesSummary>())
.List<PlacesSummary>();
你能幫我嗎?如何編寫lastPlaces查詢或可能有另一種方法?
問候, Macko