在NHIbernate (c#)中使用内部连接和分组时返回实体
本文关键字:连接 实体 返回 内部 NHIbernate | 更新日期: 2023-09-27 18:10:22
我被迫在这个项目中使用NHibernate,我只是想运行一个非常简单的查询。
我有两个表:Contacts和contachistory。我想返回在ContactHistories.....中至少有一条记录的Contact实体很简单。
在SQL中,我只需要输入select c.ContactId
from Contacts c
inner join ContactHistories ch on ch.ContactId = c.ContactId
group by c.ContactId
返回这些联系人的id列表。
我该如何在NHibernate中返回实体?
到目前为止,我已经试过了:
ICriteria criteria = Session.CreateCriteria(typeof (Contact))
.CreateAlias("ContactHistories", "ch", JoinType.InnerJoin)
.SetProjection(Projections.GroupProperty("Id"))
.Add(Restrictions.Eq("ch.Partner", partner))
.SetResultTransformer(Transformers.DistinctRootEntity);
return criteria.List<Contact>();
但是,这似乎只是返回一个id列表,而不是Contact实体列表。我:
值"3"不属于" mycompany . mynamspace . contact "类型。
我甚至可以接受使用Session的解决方案。
CreateQuery或Session.CreateSQLQuery郑重声明,实体框架棒极了。
如果你的Contact
和ContactHistory
表在映射中连接,并且Contact
类有一个子ContactHistory
的集合,你可以使用这个HQL查询来检索所有至少有一个历史记录的联系人:
var contacts =
s.CreateQuery("from Contacts c where size(c.ContactHistories) > 0")
.List<Contact>();