几天来,我一直在尝试使用 QueryOver 来完成此任务,但没有取得太大进展。我似乎找不到在一对多关系的左外连接上添加条件的方法。我有问答实体,其中一个问题有多个答案(用于调查,其中每个响应都是对同一问题的另一个答案)。我正在尝试根据某些标准过滤所有答案(例如,所有分数 < 3 的答案),但是每当我尝试添加条件时,它都会被添加到 WHERE 子句而不是 JOIN 中。
示例实体
问题:
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