【发布时间】:2012-06-28 06:21:59
【问题描述】:
几天来,我一直在尝试使用 QueryOver 来完成此任务,但没有取得太大进展。我似乎找不到在一对多关系的左外连接上添加条件的方法。我有问答实体,其中一个问题有多个答案(它用于调查,其中每个响应都是对同一问题的另一个答案)。我正在尝试根据某些标准过滤所有答案(例如,分数
示例实体
问题:
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
【问题讨论】:
标签: nhibernate