2016-08-15 3 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)과 크기 값의 합이 필요하지만, 그것이 작동하지 않으며, : 0

는 지금은이 두 결과 사이에 조인을 만들 패키지 크기가이 조건의 패키지 크기가 아닙니다. 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

그것 workkkkkkkkkkkkks 완벽하게 감사 –

+0

내 쿼리가 작동하지 않는 이유를 말씀 해주시겠습니까? –

+1

@EhsanAkbar 정확한 차이를 알아 내기 위해 생성 된 SQL 쿼리를 비교해야합니다. 나는 데이터베이스가 없기 때문에 할 수는 없지만 직접 할 수는 있습니다. – user3185569

0

연결 문자열, 데이터베이스 또는 코드에 문제가 있습니다. Sum()을 제거한 후에이 오류를 제거한 이유는이를 제거한 후이 함수를 처음 실행하면이 LINQ 문의 실행이 연기되기 때문입니다. 예 : 또는 toList() 또는 그와 비슷한 것일 수 있습니다. 호출 방법 중 하나에서 EntityFramework는 또 다른 DataReader을 열어서이 문제를 해결하려면 연결 문자열에 MultipleActiveResultSets 옵션이 사용되는지 확인해야합니다.

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

이렇게하면 여러 개의 DataReader를 한 번에 열 수 있습니다.