2013-01-10 166 views
1

此Lambda查詢有什麼問題?我希望能夠只包括特定類型的ProjectDocs,可能有許多種ProjectDocs。包含()派生類的特定類型?

ICollection<Project> projects = db.Projects 
     .Include(i => i.ProjectDoc.OfType<Cover>().Where(s => s.Status == "Active")) 
     .Include(i => i.ProjectDoc.OfType<Summary>().Where(s => s.Status == "Active")) 
     .Include(i => i.User) 
     .Include(i => i.ProjectTag.Select(t => t.Tag)).ToList(); 

我有一個模型ProjectDoc與派生類覆蓋,段和總結的。我是否應該只包含ProjectDoc並在稍後的條件中使用鑑別器列?一些類型可能有大量的結果,其他類型只有少數。

的錯誤我得到...

The Include path expression must refer to a navigation property defined 
on the type. Use dotted paths for reference navigation properties and the 
Select operator for collection navigation properties. 
Parameter name: path 

在 「項目」 的導航屬性是ProjectDoc。派生類沒有導航屬性。當我試圖獲得額外的鑰匙時。

+0

你有什麼錯誤嗎? –

+0

@Hamlet,將錯誤添加到主要問題中。 –

回答

2

此方案不受支持 - 您只能加載或不加載一組相關實體,但不能應用篩選表達式來僅加載實體的子集。

API documentation for Include()列出了支持的不同表達式,並指出該方法只是將工作委託給以字符串作爲參數的基礎Include()方法,例如ObjectQuery.Include()。該方法的文檔和鏈接頁面Shaping Query Results使得它不明顯,這不被支持。

+0

好吧,讓我們來看看如何在視圖中應用派生類過濾器? –

+0

取決於你的繼承模型 - 例如TPH,你可以在鑑別器列上進行過濾。 –