1

我正在使用Entity Framework 4.1開發MVC3應用程序。我做了LINQ查詢,並將其返回爲IEnumerable<T>。但是,在控制器中,我必須使用Include(other entity),就像ObjectSet一樣,所以我可以在視圖中顯示其他實體值(與正在查詢的實體值相關聯)。我試圖從IEnumerable<T>ObjectSet<T>,但它拋出異常。有沒有什麼辦法可以從IEnumerable得到ObjectSet,或者在IEnumerable中包含實體?
在此先感謝。IEnumerable <> to ObjectSet <>,原因:INCLUDE

回答

2

如果你的背景是還活着(如果你還沒有使用的左),如果你沒有做過.ToList()你應該能夠轉換爲ObjectQuery<T>

一個更安全的做法是在其中IQueryable<T>檢查是否可查詢是一個ObjectQuery<T>並且如果是這樣投射到ObjectQuery<T>和返回結果.INCLUDE()否則返回所述輸入查詢使用的擴展方法。

+0

擴大這一點,你可以返回是有ap你使用IEnumerable的關鍵原因?如果您將IQueryable返回給您的控制器,則可以使用IQueryable Include –

+0

如果我使用IQueryable,則會得到「實體或複雜類型無法在LINQ to Entities查詢中構建。」 – dodjavola

+0

有關詳細信息,請參閱編輯。 –

0

將它轉換爲IEnumerable後,它將與數據源斷開連接。

您應該在DAL中包含相關實體,同時它仍然是IQueryable或IObjectQuery,然後將完整結果作爲IEnumerable返回。

否則,您將會對數據庫執行額外的操作。

+0

我試過了,但仍然空白字段:( – dodjavola

+0

你看到實體在他們離開Dal之前被填充,它們在傳輸到控制器時是否丟失? – Slicksim

+0

當我直接在ObjectSet上使用查詢時,它甚至可以工作但是當我在最後一句中提到的查詢中使用查詢時,它沒有。當我在IEnumerable上使用查詢時(因爲查詢),它會丟失... – dodjavola

相關問題