2012-07-05 100 views
0
選擇一個表

如何創建使用個createCriteria NHibernate的下面的SQL語句:如何使用NHibernate個createCriteria

SELECT distinct top 20 a.* from ActivityLog a left join WallPost w on a.ActivityLogId = w.ActivityLogId left join ItemStatus i on i.StatusId = w.ItemStatus

我總是傾向於擺脫所有的表都列在SQL語句產生重複返回即使我將它映射到ActivityLog表。我也是做尋呼如下面的代碼所示:

ICriteria crit = nhelper.NHibernateSession.CreateCriteria(typeof(Model.ActivityLog), "a").CreateAlias("a.WallPosts", "w",CriteriaSpecification.LeftJoin) .CreateAlias("w.ItemStatus", "i", CriteriaSpecification.LeftJoin) .SetMaxResults(pageSize).SetFirstResult(startRow).AddOrder(Order.Desc("a.Date"));

感謝

^h

回答

0

聽起來像是你已經設置延遲加載,以虛假的映射文件意味着所有的協會和孩子集合也正在加載。你能證實嗎?

+0

延遲加載設置爲true – Hem 2012-07-05 13:33:28

+0

NHibernate的變壓器 - 檢查distinctrootentity變壓器 – Chev 2012-07-05 14:19:36

+0

嘗試,它得到的唯一的結果,但隨後它會影響分頁,因爲如果有重複,然後它會返回下的結果,那麼它應該 – Hem 2012-07-05 14:50:21

0

您問「如何使用NHibernate CreateQuery」(HQL)選擇一個表。在這種情況下,你可以選擇使用select來獲取什麼。

在您的文字中您使用的是標準。 AFAIK,你不能直接控制你想要閱讀的列。但是,如果您爲聯接創建DetachedCriteria,則不會提取。

+0

是隻是改變了這一切。你有一個如何實現這個樣本? – Hem 2012-07-05 13:33:07

+0

從ActivityLog一個 選擇左加入a.WallPosts瓦特 左加入w.ItemStatus我 爲了通過a.Date 跳過4 取10 – Roger 2012-07-05 13:52:52

+0

...其中用於跳過的號碼,並採取(當然)是用於尋呼。 – Roger 2012-07-05 13:53:59