2015-05-11 174 views
0

我有一個實體框架查詢,其中的項目顯示基於用戶定義的標準的變量集。最終的查詢應該包含相關實體「主題」,但僅以間歇方式進行。也就是說,在相同的結果集中,一些結果將包括他們的主題,而另一些則不會。爲了使事情更加奇怪,同一個記錄「a」將在一個請求中包括其相關主題,但不包含在另一個請求中,即使我在兩種情況下都使用相同的選擇代碼。下面是最終的相關片段中進行選擇:相關實體只包括間歇在實體框架查詢

var newQuery = query.Select(l => new 
      { 
       RecordId = l.RecordId, 
       RawFileId = l.RawFileId, 
       Subjects = l.RecordSubjects.Where(s => s.Subject.ClientId == data.ClientId && l.RecordId == s.RecordId && s.IsActive).Select(s => new { Name = s.Subject.Name, SubjectId = s.Subject.SubjectId, Description = s.Subject.Description }), 

       Url = (l.Url == null) ? "#" : l.Url, //make sure all results display a valid Url, even if the field is null 
       RegionCode = l.RegionCode ?? "", 
       RegionName = l.Region.Name ?? "", 
       Year = l.Year 

      } 

我已經消除了一堆附加字段和清晰度等相關實體。

UPDATE:爲了進一步澄清,我可以運行完全相同的查詢,並有受試者出現特定記錄的第一次,並沒有任何顯示下。所以它不可能是關於數據的任何事情,我不認爲。

+0

您能提供樣本和數據值嗎? – Mutant

+0

我相信「斷斷續續的」時尚將與主題的客戶端ID等於當前數據對象的ID並且查詢的主鍵等於主題的主鍵以及主題仍處於活動狀態的主題完全相關。 –

+0

試圖找出如何做到這一點,仍然尊敬我的NDA ... – acullen72

回答

0

嘗試在Select之前丟棄.AsEnumerable().,即query.AsEnumerable().Select(這將強制檢索所有需要的數據,而不是使其受到延遲加載。也就是說,也許一些實體可能已經被EF加載並且存在,而其他實體可能不存在,但是會根據需要被延遲加載,這可能就是爲什麼你會得到這種間歇性行爲。做一個.AsEnumerable()強制從數據庫中加載Subject實體的所有結果。當然,這可能會導致性能開銷,這對於您的用例來說是不可接受的。

更新

也想知道如果data.ClientId可能是問題的一部分。 data不在您發佈的示例中。

更新2 作爲@TravisJ在下面的評論暗示,這是不可能的,我的答案是正確的或@ acullen72的情況完全正確的。然而,@ acullen72要求現在留言。

+0

生成的查詢的任何枚舉都應列舉可枚舉的主題。我不確定這會解決「間歇性」觀察。 –

+0

@TravisJ,好點。 acullen72是你枚舉結果,還是你檢查一些存在的對象的未枚舉結果,因爲EF的dbContext已經有了它們? – DWright

+0

data.ClientId是傳遞給該方法的參數。此外,添加「ToList()」給了我以下錯誤:{「LINQ to Entities not recognized the method'System.Collections.Generic.List'1 [<> f__AnonymousType0'3 [System.String,System.Int32,System .String]] ToList [<> f__AnonymousType0'3](System.Collections.Generic.IEnumerable'1 [<> f__AnonymousType0'3 [System.String,System.Int32,System。String]])'方法,並且這個方法不能被翻譯成商店表達式。「} – acullen72