2012-07-05 101 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