この特定の sql クエリを nHibernate QueryOver 言語で記述しようとしていますが、これにはあまり詳しくありません。
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 オブジェクトを取得しようとしています - 常に 1 つまたは 1 つだけにする必要があります)。 . クエリは常に 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();
誰かが私を正しい方向に向けたり、私が間違っていることを説明したりできますか?
前もって感謝します。