2012-01-21 78 views
2

我對實體框架(4)有點新鮮。我一直在追蹤我們的軟件中的一個錯誤,並且我已經明白了它的後遺症。我很好奇,如果有人能幫我解釋爲什麼這兩個Counts(dataCount和data2Count)會因我調用它們的方式而有所不同。 data2Count是正確的,並且實際上與我在SQL中的內容相匹配。實體框架計數差異

 using (var context = new Entities(ConnectionString)) 
     { 
      var startDateTime = DateTime.Parse("10/1/2011"); 
      var endDateTime = DateTime.Parse("12/31/2011 23:59"); 

      var query = from data in context.vDATA 
         where data.ParentId == parentId && 
         data.TimeStamp >= startDateTime && 
         data.TimeStamp <= endDateTime 
         select data; 

      var data = query.ToList(); 
      var dataCount = data.Where(x => x.TestType == 20).Count(); 
      //dataCount is 162 

      var data2 = query.Where(x => x.TestType == 20); 
      var data2Count = data2.Count(); 
      //data2Count is 198 
     } 

謝謝。

+0

「TestType」列的類型是什麼? – dasblinkenlight

+0

它是一個可爲空的整數。 –

回答

1

好吧,我想我找到並解決了正在發生的事情 - 儘管我不確定我能否在內部解釋EF如何處理它......我在這裏找到一篇文章:Entity framework result discrepancy for a database views聽起來像是一個類似的問題。我在SQL中的數據有幾個記錄,他們的字段大致相同。唯一的區別是TestType。但它並未被標記爲關鍵的一部分。簡單地將密鑰擴展爲包含此字段會導致Counts正確匹配。

0

parentId如何設置?它是一個在代碼片段運行的循環之外聲明的變量嗎?如果是這樣,這可能會因爲關閉問題而變得怪異。 This other question爲您提供了大量關於如何解決關閉問題的信息。

+0

感謝您的反饋。這是一個偉大的想法;不過,我可以使用一個常數值(例如data.ParentId == 129),而且我仍然可以得到相同的結果。此外,沒有循環,所以我不認爲關閉是問題。 –