와 사용자 정의 개체 내가 무엇을 시도하고하면 다음과 같다 SQL 쿼리에 다음과 같이 표시되는 :LINQ 목록 <T> 재산권
var query = from t in Tests
select new OTest
{
TestId = t.TestId
};
문제는 내가 LINQ의 R없이 쿼리의 일환으로 내 주요 OTest 객체의 목록 속성으로 "하위 검사"얻을 수있는 방법이다 데이터에 대한 기본 쿼리에서 100 개의 하위 쿼리를 통합합니다.
, 나는 다음과 같이했다 경우는 매우 실용적되지 않습니다 반환되는 각 레코드에 대한 쿼리를 실행합니다 : 내 목록 속성을 얻을 수있는 방법에
var query = from t in Tests
select new OTest
{
TestId = t.TestId,
SubTests = (from st in SubTests where st.TestId = t.TestId select new OSubTest{SubTestId = st.SubTestId}).ToList()
};
어떤 생각이 채우기 위해를 단일 쿼리? 아마도 왼쪽 조인으로?
도움을 주시면 감사하겠습니다.
설명이 필요한 경우 저에게 문의하십시오.
편집
좋아,하지만 최대한 빨리 2 차 한 배의 데이터베이스 (100)의의를 조회하는 2 중 하나를 추가, 1 개 하위 목록이있을 때이에서 살펴 본다,이 작업을 수행합니다. 내 정확한 쿼리는 다음과 같습니다.
public List<OFile> GetFiles(int fileGroupId)
{
var query = (from f in CoreContext.Files
join fgf in CoreContext.FileGroupFiles on f.FileId equals fgf.FileId
where fgf.FileGroupId == fileGroupId
select new OFile
{
ActiveFile = f.ActiveFile,
FileExtension = f.FileType,
FileGuid = f.FileIdentifier,
FileName = f.FileName,
FilePath = f.FilePath,
FileSize = f.FileSize,
FileTitle = f.FileTitle,
RevisionId = f.RevisionId,
ParentFileId = f.ParentFileId,
FileId = f.FileId,
Attributes = f.FileAttributeFiles.Where(id => id.FileId == f.FileId).Select(
id => new OFileAttribute
{
FileAttributeId = id.FileAttributeId,
Value = id.Value
}).ToList(),
Tags = f.FileTags.Where(id => id.FileId == f.FileId).Select(
id => new OFileTag
{
FileTagId = id.FileTagId,
TagName = id.TagName,
}).ToList(),
});
return query.ToList();
}
속성은 데이터베이스를 100 회 쿼리하고 JOIN으로 표시되지 않습니다.
FileAttributeFiles 테이블에는 FK와 Attributes 테이블이 있습니다.
감사
예, SQL 프로파일 러를 실행하여 각 레코드에 대해 하위 쿼리를 실행했습니다. 나는 내 질문을 두 번 점검하고 거기에 있으면 안되는 것이 있는지 알아볼 것입니다. – CodeLikeBeaker
좋아, 하나의 하위 쿼리와 함께 작동하지만, 내가 2 때, 그것은 100 번 데이터베이스를 쿼리합니다. 내 게시물을 실제 쿼리로 업데이트했습니다. 한 번에 하나씩 개별적으로 실행하면 제대로 작동하지만 둘 다있을 때마다 특성은 항상 100 번 쿼리됩니다. 생각? – CodeLikeBeaker
그런 다음 Craig의 특허 LINQ 디버깅 알고리즘 ™을 사용하십시오. 작동하는 케이스와 그렇지 않은 케이스를 가져 와서 다른 하나의 부품으로 변환하십시오. 이렇게하면 문제의 범위를 좁힐 수 있습니다. 아마도 그것은'ToList()'일까요? 그것없이 시도해 볼까요?아마도 두 개의 서브 쿼리일까요? Northwind에 대해 별도의 테스트 케이스를 사용해보십시오. 조만간 정확한 문제를 발견하게 될 것입니다. –