관절

2016-08-23 2 views
0

나는이 쿼리를 하지만 난 아무 것도 없어. MaterialRequestContractorDetailstestpackage 사이의 연결관절

내가 testpackagejointtestpackagejoint를 사용하여와의 연결을 가질 수 있지만,이 연결 문제를 만들어 내 기록 joint 행을 기반으로 비슷한 데이터를 반복

내 공동 테이블에이 개 기록이있는 경우 내 말은, 내 결과는 유사한 데이터로 2 번 반복됩니다.

+0

이것은 정상적인 현상이며, 조인 (및 SQL이 수년간 조인하는 방식)입니다. 질문은 달성하려는 것이 무엇입니까? –

+0

@IvanStoev 그래서 내가 한 가지 결과 만 가질 수는 없다는 뜻입니까? –

+0

하지만 내 함수를 호출 할 때 : List lstMaterialRequestContractorDetails = _reportMaterialRequestContractorRepository.ShowReport (Id) .Distinct(). ToList(); 결과는 두 개의 비슷한 레코드로 바뀌 었습니다 .i 시트 테이블에 2 개의 레코드가 있습니다. –

답변

0

당신이하고 싶은 것은 GroupJoin 기능입니다. 쿼리 구문에서이 같이 표시됩니다 : 실제로 무슨 짓을

var result = (from m in MaterialRequestContractorDetails 
       where m.MaterialRequestContractorId == MRCId 

       join mat in MaterialDescriptions on m.MaterialDescriptionId equals mat.Id 
       join l in Lines on m.LineId equals l.Id 
       join sheet in Sheets on m.SheetId equals sheet.Id 

       join joint in (from joint in Joints 
          join testjoint in TestPackageJoints on joint.Id equals testjoint.Id 
          join testpack in TestPackages on testjoint.TestPackageId equals testpack.Id 
          select new { joint.SheetId, testpack }) 

       on m.SheetId equals joint.SheetId into tt 

       select new { Details = m, Line = l, TestPacks = tt.Select(x => x.testpack).ToList() }).ToList(); 

별도의 인가에 조인의 모든 "하반기"는 선택 중첩 된 후 주요 부분으로 합류하지만, 이렇게 사용 할 때 into 키워드 (GroupJoin)

테스트 데이터는 다음과 같습니다. MRCId이 1 인 레코드가 하나 있는데 레코드에 TestPackage의 목록이 2 개 있습니다.

List<dynamic> MaterialRequestContractorDetails = new List<dynamic> 
{ 
    new { MaterialRequestContractorId = 1, MaterialDescriptionId = 1, LineId = 1, SheetId = 1}, 
    new { MaterialRequestContractorId = 2, MaterialDescriptionId = 2, LineId = 2, SheetId = 2}, 
}; 

List<dynamic> MaterialDescriptions = new List<dynamic> 
{ 
    new { Id = 1 }, new { Id = 2 }, 
}; 

List<dynamic> Lines = new List<dynamic> { new { Id = 1 } }; 
List<dynamic> Sheets = new List<dynamic> { new { Id = 1 } }; 
List<dynamic> Joints = new List<dynamic> { new { SheetId = 1, Id = 1 } }; 

List<dynamic> TestPackageJoints = new List<dynamic> 
{ 
    new { Id = 1, TestPackageId = 1 }, 
    new { Id = 1, TestPackageId = 2 }, 
}; 

List<dynamic> TestPackages = new List<dynamic> 
{ 
    new { Id = 1 }, new { Id = 2 }, 
}; 

int MRCId = 1; 
+0

안녕하세요. 다음을 한번보세요 : http : //stackoverflow.com/questions/39243771/efficiently-convert-rows-to-columns-in-sql-server-view –

+0

@EhsanAkbar - 확인할 것입니다 : –

+0

고마워, 친구 –

관련 문제