2016-08-15 39 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

現在我創建兩個結果之間的連接:

_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

comment for please vote !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1 –

+0

怎麼可以當查詢只返回一個單獨的值時,屏幕截圖會顯示查詢結果? – user3185569

回答

1

您需要篩選出您不需要的狀態的記錄。此外,您還需要開始使用更具可讀性的Elegant Query-Syntax。像這樣:

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

它workkkkkkkkkkkkkks完全謝謝 –

+0

請問爲什麼我的查詢不起作用? –

+1

@EhsanAkbar我真的需要比較生成的SQL查詢來知道確切的區別。我不能這樣做,因爲我沒有數據庫,但你可以自己做。 – user3185569

0

你的連接字符串,你的數據庫或你的代碼有問題。刪除Sum()時出現此錯誤的原因是因爲在刪除此LINQ語句後,首次調用執行此LINQ語句的函數時會延遲執行此語句。這可能是foreachtoList()或類似的東西。在您的一種調用方法中,EntityFramework內部會打開另一個DataReader因此,如果要解決此問題,應檢查連接字符串是否已啓用MultipleActiveResultSets選項。

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

如果啓用此功能,則應該能夠一次打開多個DataReader。