2013-01-09 44 views
1
var diaryEntries = (from entry in repository.GetQuery<OnlineDiary.Internal.Model.DiaryEntry>() 
           .Include("DiaryEntryGradeChangeLog") 
           .Include("DiaryEntryAction") 
              join diary in repository.GetQuery<OnlineDiary.Internal.Model.OnlineDiary>()           
              on entry.DiaryId equals diary.Id 
              group entry 
              by diary 
              into diaryEntriesGroup 
              select new { Diary = diaryEntriesGroup.Key, 
               DiaryEntry = diaryEntriesGroup.OrderByDescending(diaryEntry => diaryEntry.DateModified).FirstOrDefault(), 
              }); 

該查詢不包括「DiaryEntryGradeChangeLog」和「DiaryEntryAction」導航屬性,這個查詢有什麼問題?。包含在下面的查詢中並不包含真正的

我已刪除從查詢中加入和糾正按以下,但仍然是填充任何

var diaryEntries = from entry in repository.GetQuery<OnlineDiary.Internal.Model.DiaryEntry>() 
            .Include("DiaryEntryGradeChangeLog").Include("DiaryEntryAction") 
            .Where(e => 1 == 1) 
             group entry 
             by entry.OnlineDiary 
             into diaryEntryGroups 
             select 
             new { DiaryEntry = diaryEntryGroups.OrderByDescending(diaryEntry => diaryEntry.DateModified).FirstOrDefault() }; 
+0

它只是說它們是空的,即使我可以在數據庫中正確地看到它們。 – Nirman

+0

要澄清,通過「填充任何東西」,你的意思是'diaryEntries'爲空?或者是沒有項目的'IQueryable'?或者是否填充了具有空屬性的正確數量的對象? – Basic

+0

diaryEntry得到填充DiaryEntry的集合,這很好...「DiaryEntryGradeChangeLog」集合和「DiaryEntryAction」導航屬性爲空。 – Nirman

回答

1

不會。 Include只有在查詢的形狀沒有改變(按設計)時才起作用。如果您使用此查詢,將工作,因爲查詢的形狀仍然是相同的(OnlineDiary.Internal.Model.DiaryEntry):

var diaryEntries = (from entry in repository.GetQuery<OnlineDiary.Internal.Model.DiaryEntry>() 
          .Include("DiaryEntryGradeChangeLog") 
          .Include("DiaryEntryAction"); 

但是,一旦你使用手動連接,分組或投影(select new { }),你已經改變了查詢的形狀和所有Include呼叫都被跳過。

編輯:

您必須使用像這樣(未經測試),以獲得相關的數據:

var diaryEntries = from entry in repository.GetQuery<OnlineDiary.Internal.Model.DiaryEntry>() 
        group entry by entry.OnlineDiary into diaryEntryGroups 
        let data = diaryEntryGroups.OrderByDescending(diaryEntry => diaryEntry.DateModified).FirstOrDefault() 
        select new { 
         DiaryEntry = data, 
         GradeChangeLog = data.DiaryEntryGradeChangeLog, 
         Action = data.DiaryEntryAction 
        }; 

或任何類似的查詢,可以手動填充屬性投影匿名或映射的類型關係。

+0

是的,但要求是有連接和條件... – Nirman

+0

所以你不能使用'Include',你必須使用更復雜的投影,這將會加載相關數據或通過單獨的查詢加載相關數據。 –

+0

連接導致問題,但選擇應該沒問題,因爲在結構計算之後應用它? – Basic