2016-08-15 8 views
-1

私はこのクエリに私のwhere句は、私の結果には適用されません

_ctx.TestPackageReportDetails.GroupBy(i => new {i.Status, i.TestPackageId}) 
       .Where(m => m.Count(i => i.Status == "Accept") == 5) 

結果があります。

enter image description here

そして、このクエリ:

var q2 = _ctx.TestPackages.ToList(); 

enter image description here

今私は2つの結果の間の結合を作成:

_ctx.TestPackageReportDetails.GroupBy(i => new { i.Status, i.TestPackageId }) 
       .Where(m => m.Count(i => i.Status == "Accept") == 5) 
       .Join(_ctx.TestPackages, i => i.Key.TestPackageId, m => m.Id, (i, m) => new { pack = m, det = i }) 
       .Sum(i => i.pack.Size); 

私はtestpackageidに基づいて共同を作成し、私はこの条件Where(m => m.Count(i => i.Status == "Accept") == 5)とサイズ値の合計を必要とするが、それは動作しませんし、クエリはすべての計算パッケージサイズではなく、この状態のパッケージサイズWhere(m => m.Count(i => i.Status == "Accept") == 5)

+0

また、テストのために '_ctx'のクラスとサンプルデータを提供できますか? – uTeisT

+0

コメントをお願いします!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1 –

+0

どうすればいいですか?クエリがSUMである単一の値のみを返す場合、スクリーンショットはクエリ結果を表示しますか? – user3185569

答えて

1

必要のないステータスでレコードをフィルタリングする必要があります。また、より読みやすいエレガントなクエリ構文を使用する必要があります。このように:

var sum = (from i in _ctx.TestPackageReportDetails 
      where i.Status == "Accept" 
      group i by new { i.Status, i.TestPackageId } into grouping 
      where grouping.Count() == 5 
      join m in _ctx.TestPackages 
      on grouping.Key.TestPackageId equals m.Id 
      select m.Size).Sum(); 
+0

それはworkkkkkkkkkkkks完璧に感謝 –

+0

私のクエリが機能しない理由を教えてくださいありますか? –

+1

@EhsanAkbar私は本当に正確な違いを知るために生成されたSQLクエリを比較する必要があります。私はデータベースを持っていないので、私はそれを行うことはできませんが、あなたはそれを自分で行うことができます。 – user3185569

0

接続文字列、データベースまたはコードに問題があります。 Sum()を削除するとこのエラーが発生する理由は、このLINQステートメントを削除した後に、このLINQステートメントの実行が最初に実行されるときに遅延されるためです。これはforeachまたはtoList()またはこれに類するものです。呼び出しメソッドの1つでEntityFrameworkは内部で別のDataReaderを開きます。この問題を解決するには、接続文字にMultipleActiveResultSetsオプションが有効になっているかどうかを確認する必要があります。

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;MultipleActiveResultSets=true; 

これを有効にすると、複数のDataReaderを一度に開くことができます。

関連する問題