2013-09-30 101 views
1

我想使用實體框架將相關對象的集合包裝到單個對象中。 我的情況如下: 我有一個名爲「學生」的實體和一個名爲「書」的實體。 這些之間的關係是這樣的:"Student"-1-----*-"Book"。顯然有幾本書可以屬於同一個學生。 現在我嘗試解釋簡化了我想要實現的內容:我想訪問Student的Books屬性,如下所示:Student.Books,但只有1990年以後出版的書籍才應包含在集合中。我想我將不得不攔截Entity Framework的選擇語句來實現這一點,但我不知道如何做到這一點。 如果Books屬性是包含書籍集合的自定義包裝類的實例,那麼我可以更好地定義方法,以直接在Books屬性上過濾集合。 謝謝你的幫助!實體框架 - 包裝相關對象的集合

問候 sjkm

+0

EF對此沒有支持。有一個功能請求可以將一個過濾器添加到一個'Include'(就像'Include(s => s.Books.Where(...))'。 –

+0

謝謝您的澄清! – sjkm

+0

[This](http: /stackoverflow.com/q/13903314/861716)對你來說也很有趣,它甚至可能是重複的。 –

回答

0

你可以創建一個局部屬性爲您的實體框架模型類對象的學生是這樣的: -

public partial class Student 
{ 
    public IQueryable<Book> FilteredBooks 
    { 
     get 
     { 
     return this.Books.Any(b=> b.PublishedDate.Year >= 1990).AsQueryable(); 
     } 
    } 

} 

從理論上講,你現在應該能夠訪問: -

object.Datasource = Student.FilteredBooks.ToList(); 

希望這能幫到您嗎?

+0

謝謝,但是這對我來說很清楚,books屬性應該是一個custum類的實例。攔截學生對象的人口你知道如何做到這一點嗎? – sjkm

+0

我不確定你能說實話如果你在哪裏爲你的映射對象創建一個部分類,它將不允許你訪問這些圖書財產,因爲它已經由enityframework實現了,你可能需要爲Student創建一個部分類,並在那裏添加一個新的屬性來做你想要做的事情,但它不是我以前必須做的事情。 – Derek

+0

Hello Derek。感謝您的回覆,我已經考慮過doi那個。任何想法如何在不加載所有圖書元素的情況下填充該字段?要麼據我所知或以其他方式攔截可能的實體框架選擇。我很確定有另外一個解決方案,我們現在還不知道任何東西:) – sjkm