당신이하고 싶은 것은 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;
이것은 정상적인 현상이며, 조인 (및 SQL이 수년간 조인하는 방식)입니다. 질문은 달성하려는 것이 무엇입니까? –
@IvanStoev 그래서 내가 한 가지 결과 만 가질 수는 없다는 뜻입니까? –
하지만 내 함수를 호출 할 때 : List lstMaterialRequestContractorDetails = _reportMaterialRequestContractorRepository.ShowReport (Id) .Distinct(). ToList(); 결과는 두 개의 비슷한 레코드로 바뀌 었습니다 .i 시트 테이블에 2 개의 레코드가 있습니다. –