我一直在嘗試使用QueryOver完成此操作幾天而沒有太多進展。我似乎無法找到在一對多關係上爲左外連接添加條件的方法。我有問題和答案實體,問題有多個答案(這是一個調查,其中每個答案是對同一問題的另一個答案)。我試圖根據一些條件篩選所有的答案(例如,所有答案的分數爲< 3),但是,無論何時我嘗試添加條件語句,它都將添加到WHERE子句中,而不是JOIN中。向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並在那裏
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
我希望我可以喜歡的答案。這幫了我很多,謝謝! – iamserious
很高興我找到了這個答案,正是我一直在尋找的,非常感謝 –
爲了這個世界上所有的人的愛!謝謝!我非常希望nhibernate文檔更好。 – mcfea