3

我有這樣的事情:EF代碼優先+延遲加載,投影不會按預期

var tmp =_forumsDb.Threads 
.Where(t => t.Id == variable) 
.Select(t => new { Thread = t, Posts = t.Posts.Take(1) }) 
.Single(); 

現在,我期待tmp.Thread.Posts.Count();爲1,但它需要的是我在數據庫中的所有帖子。是否有可能使用需要顯式數量的帖子的投影,在單個查詢中進行而不關閉延遲加載?

編輯: 我試圖做這樣的事情,但它不工作之一:

var tmp =_forumsDb.Threads 
.Where(t => t.Id == variable) 
.Select(t => new { Thread = t, Posts = t.Posts.OrderBy(p => p.DateCreated).Take(1) }) 
.Select(t => t.Thread) 
.Single(); 
+0

我認爲這是一個合法的問題,並沒有值得downvote。 – rcdmk

+0

我相信你的問題的答案很簡單:不。你爲什麼不想關閉延遲加載?你是否希望將它用於'Thread'實體的其他導航屬性? – Slauma

回答

2

tmp.Thread.Posts是配置延遲加載其導航性能。由於它尚未加載,訪問它會加載所有剩餘的帖子。

tmp.Posts不是導航屬性。這是你應該能夠訪問而不觸發另一個查詢的人。

+0

是的,tmp.Posts加載正確,並且它只是單個帖子。但我希望它投影這個tmp.Posts到tmp.Thread.Posts,我該怎麼做? – ojek

+0

@ojek爲所有導航屬性啓用延遲加載,或者爲所有導航屬性禁用加載加載。根本沒有辦法來禁用一個特定對象的特定屬性。 – hvd