2015-10-20 60 views
0

我試圖使用Simple.Data作爲我的ADO,但我遇到了一個問題,試圖將連接一對錶的查詢放在一起,然後根據非主表中的值過濾結果。Simple.Data - 如何將WHERE子句應用於連接表

場景是一個工作應用程序的應用程序(但工作就像一個特定的日子要完成的具體任務)。有3個相關的表格,jobs,applicationsapplication_historyjobs表中的每個記錄可以有多個applications,而每個applications的記錄可以有多個application_history。在application_history表中,有一個status列,因爲每個應用程序都被髮送,提供並最終被接受。

所以我想要一個查詢,返回所有接受的未來作業的應用程序;即jobs表中的date列將來在何處,並且application_history表中的狀態列是5(意思是接受的)的關聯記錄。

如果這是普通的舊SQL,我會使用此查詢:

 
SELECT A.* FROM application AS A 
INNER JOIN application_history AS AH ON AH.application_id = A.id 
INNER JOIN job AS J ON J.id = A.job_id 
WHERE AH.status_id = 3 AND J.date > date('now') 

但我想知道如何使用Simple.Data來實現同樣的事情。對於獎勵積分,如果你可以從忽略'工作必須在未來'的一步開始,這將幫助我理解正在發生的事情。

回答

1

作爲參考:Simple.Data documentation特別是關於顯式連接的部分。 你應該能夠做這樣的事情:

//db is your Simple.Data Database object 

db.application 
    .Join(db.application_history) 
    .On(db.application.id == db.application_history.application_id) 
    .Join(db.job) 
    .On(db.Applications.job_id == db.job.id) 
    .Where(db.application_history.status_id == 3 && db.job.date > DateTime.Now()); 

我不知道Simple.Data不論是否知道如何處理Date部分。

+0

謝謝,這是最完美的答案。對於記錄來說,日期比較工作得很好,但是Where子句應該使用&&'而不是'AND'。 –

+1

哦,當然。我會解決它。 – Tobias