QueryOver を使用して数日間これを達成しようとしましたが、あまり進歩がありませんでした。1 対多の関係の左外部結合に条件を追加する方法が見つからないようです。質問に複数の回答がある質問と回答のエンティティがあります(各回答が同じ質問に対する別の回答である調査用です)。いくつかの基準 (スコアが 3 未満のすべての回答など) に基づいてすべての回答をフィルター処理しようとしていますが、条件を追加しようとすると、JOIN ではなく WHERE 句に追加されます。
エンティティの例
質問:
public class Question : Entity<int>
{
public virtual IEnumerable<Answer> Answers { get; set; }
...
}
答え:
public class Answer : Entity<int>
{
public virtual Question Question { get; set; }
public virtual int Score { get; set; }
...
}
クエリ
JoinQueryOver を使用するさまざまなバリエーションを試しました...
session.QueryOver<Question>()
.Where(q => q.Survey.Id == id)
.Left.JoinQueryOver(q => q.Answers)
.Where(a => a.Score < 3)
...そして JoinAlias と Where でのエイリアスの使用
session.QueryOver<Question>(() => questionAlias)
.Where(q => q.Survey.Id == id)
.Left.JoinAlias(() => questionAlias.Answers, () => answerAlias)
.Where(() => answerAlias.Score > 3);
私はいつも次のようなクエリを受け取ります:
SELECT * FROM QUESTION q
left outer join ANSWER a on q.Id=a.Question_id
WHERE q.Survey_id = 1 and a.Score < 3
しかし、私は必要です:
SELECT * FROM QUESTION q
left outer join ANSWER a on q.Id=a.Question_id and a.Score < 3
WHERE q.Survey_id = 1