我有一個應用程序使用EF 6和MVC 5,適用於輸入數據,但現在當我嘗試顯示它的一些我有麻煩。我的實體的基本佈局可以看到如下圖:如何在EF 6和MVC 5中查詢和顯示子孫數據?
在那裏我遇到問題的第一部分是在查詢和篩選數據。我希望返回一份調查和簽收存在的房屋和相關數據清單,但批准不會。在直SQL,即現在的工作查詢是:
SELECT *
FROM Premises p LEFT OUTER JOIN Approvals a ON a.Id = p.Id
JOIN Surveys s ON s.PremiseId = p.Id
JOIN SignOffs so ON so.Id = s.Id
WHERE a.ApprovedBy IS NULL
,我開始用的代碼是這樣的:
var premises = Premises.Include(p => p.Approval)
.Include(p => p.Surveys)
.Include(p => p.Surveys.Select(s => s.SignOff));
這出現 *返回所有記錄,包括孩子的數據,但當我嘗試對其進行過濾時,我只收到具有簽收記錄但沒有批准的記錄,但不起作用。
var premises = Premises.Include(p => p.Approval).Where(p => p.Approval.ApprovedBy == null)
.Include(p => p.Surveys)
.Include(p => p.Surveys.Select(s => s.SignOff).Where(s => s.Signature != null));
如果我用這個代碼,我得到這個錯誤:
包含路徑表達式必須引用的類型定義的導航屬性。對於參考導航屬性使用虛線路徑,對集合導航屬性使用Select運算符。 參數名稱:路徑
我已經改變了這個查詢周圍很多嘗試不同的東西,所以我不知道我所做的,但我認爲首先Where
語句可能通過自身工作,但第二個肯定會導致錯誤。 如何構建我的查詢來讓它正確地返回請求的數據過濾?
此外,我在上面加星號表示查詢出現返回所有的數據和子數據,因爲我實際上不能測試它。當我試圖爲此編寫我的Razor CSHTML頁面時,它不會給我智能感知兒童和孫子的數據,如果我輸入我認爲應該的東西,我會得到錯誤。我如何需要在頁面上引用這些數據?