我正在尝试用我不太熟悉的 nHibernate QueryOver 语言编写这个特定的 sql 查询:
SELECT MessageThreadId FROM MessageThreadAccesses
WHERE ProfileId IN (arr)
GROUP BY MessageThreadId
HAVING COUNT(MessageThreadId) = arr.Count
其中 arr 是我作为参数传递的整数数组(用户 ID),MessageThreadAccess 实体如下所示:
public virtual MessageThread MessageThread { get; set; }
public virtual Profile Profile { get; set; }
....
在阅读了多个堆栈溢出线程并进行了实验之后,我的查询已经走到了这一步(尝试获取 MessageThread 对象 - 它应该始终只有一个或没有),但它仍然不起作用,我不确定还有什么可以尝试. 查询似乎总是返回 MessageThreadAccess 对象,但在读取它的 MessageThread 属性时,它始终为 NULL。
var access = Session.QueryOver<MessageThreadAccess>()
.WhereRestrictionOn(x => x.Profile).IsIn(participants.ToArray())
.Select(Projections.ProjectionList()
.Add(Projections.Group<MessageThreadAccess>(x => x.MessageThread))
)
.Where(
Restrictions.Eq(Projections.Count<MessageThreadAccess>(x => x.MessageThread.Id), participants.Count)
)
.TransformUsing(Transformers.AliasToBean<MessageThreadAccess>())
.SingleOrDefault();
return Session.QueryOver<MessageThread>()
.Where(x => x.Id == access.MessageThread.Id)
.SingleOrDefault();
有人可以指出我正确的方向,或者解释我做错了什么吗?
提前致谢。