2012-01-21 41 views
2

私はEntity Framework(4)を少し新しくしました。私はソフトウェアのバグを追跡してきました。なぜ誰かが私がこれらの2つのCount(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

null可能な整数です。 –

答えて

1

申し訳ありませんが、何が起きているのかを見つけて解決したと思いますが、内部的にEFの処理方法を説明することはできません...記事には同じような問題があります:Entity framework result discrepancy for a database views SQLの私のデータにはいくつかのレコードがあり、それらのフィールドは大体同じものでした。区別できる唯一のフィールドはTestTypeでした。しかし、キーの一部としてマークされていませんでした。単にこのフィールドを含めるようにキーを拡張すると、カウントが正しく一致するようになりました。

0

parentIdはどのように設定されていますか?このコードフラグメントが実行されているループの外側で宣言された変数ですか?もしそうなら、閉鎖の問題のために、これはファンキーな演技かもしれません。 This other questionは、クロージャの問題に対処する方法に関する多くの情報を提供します。

+0

フィードバックありがとうございます。それは素晴らしい考えです。ただし、一定の値(例:data.ParentId == 129)を使用できますが、同じ結果が得られます。また、ループがないので、私は閉鎖が問題だとは思わない。 –