2011-11-08 57 views
2

在SQL我有一種內在的連接條件是這樣的:NHibernare JoinQueryOver條件

SELECT 
    UniqueID 
FROM 
    Manuscripts M 
    inner join 
     Workflows W 
      on M.WorkflowID=W.WorkflowID 
    inner join 
     WorkflowSteps WS 
      on W.WorkflowID=WS.WorkflowID 
      and WS.WorkflowStepID = W.LastStepID 
WHERE 
    M.IssueID = ? 
    and W.LastStepID is not null 
    and WS.ActualEnd is null 

我翻譯查詢NHibernate的,到目前爲止,我無法定義的附加連接條件,我的查詢如下所示:

Workflows workflow = null; 
WorkflowSteps workflowStep = null; 

return session.QueryOver<Manuscripts>() 
    .Where(p => p.Issues == Issue) 
    .Inner.JoinQueryOver(p => p.Workflows,() => workflow) 
    .WhereNot(p => p.LastWorkflowStep == null) 
    .Inner.JoinQueryOver(p => p.WorkflowSteps,() => workflowStep) 
    .Where(() => workflowStep.DateActualEnd == null) 
    .Select(p => p.UniqueId) 
    .List<string>(); 

如何將附加條件添加到使用條件API的連接?

非常感謝, 佩德羅

回答

0

我不知道它是否可以添加額外的連接條件,但由於您使用的是內部聯接你可以放置附加條件在查詢的WHERE部分。

+0

恐怕不起作用。 (()=> workflowStep.DateActualEnd == null) 。(()=> workflowStep == workflow.LastWorkflowStep) 這也是我最初的方法,但沒有奏效。 – Pedro

+0

@Pedro它爲什麼不起作用?它會拋出異常還是生成無效的SQL?請發佈更多信息。 – cremor

+1

是的,它會在生成SQL之前引發未設置的對象引用異常。我認爲這與連接條件有關,不知何故nhibernate不能使用上面的查詢創建連接條件。 – Pedro