2016-11-18 32 views
1

我在這裏有一個查詢,它提取單個實體對象並且只有一個滿足特定條件的嵌套實體,但是我在執行時收到一個錯誤。實體框架在使用.include獲取嵌套對象時拋出錯誤

下面是查詢

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId) 
       .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true)).First(); 

這裏是異常錯誤消息

包含路徑表達式必須引用的類型所定義的導航屬性。對於參考導航屬性使用虛線路徑,對集合導航屬性使用Select運算符。 參數名稱:路徑

我也試圖與另一個。首先()運行它,但還是同樣的錯誤消息

Profile profile = dbContext.Profiles.Where(i => i.ApplicationUserGuid == guiId) 
       .Include(i => i.ProfileImages.Where(k => k.IsMainImage == true).First()).First(); 

回答

2

,無法篩選的Include內相關的實體,您要需要與期望的結果對項目的查詢,或者使用explicit loading

Profile profile = dbContext.Profiles 
          .Where(i => i.ApplicationUserGuid == guiId) 
          .First(); 
dbContext.Entry(profile) //Explicit Loading 
     .Collection(b => b.ProfileImages) 
     .Query() 
     .Where(k => k.IsMainImage == true).Take(1) 
     .Load(); 

如果你做的投影也將只有一個往返到您的數據庫,如果你使用expli加載它將是兩個。

僅供參考,如果您想投影結果,則投影爲匿名類型或DTO。更多信息here

+0

我遵循你的顯式加載示例及其工作,但它返回所有嵌套的實體,而不僅僅是符合where條件的實體! – user1186050

+0

我編輯了我的答案,'採取'方法應該修復 – octavioccl

+0

我還有點不確定爲什麼所有的圖像都會在除了1滿足where條件的所有圖像時被返回?那麼where條件的目的是什麼?如果它不工作?我嘗試了Take(1),它仍然返回所有的圖像! – user1186050

相關問題