Я пытаюсь сделать следующее:
У меня есть пользовательский объект OTest и OSubTest:
public class OTest
{
public int TestId {get; set;}
public List<OSubTest> SubTests {get; set;}
}
public class OSubTest
{
public int SubTestId {get; set;}
}
Теперь я выполню запрос LINQ to SQL, который будет выглядеть следующим образом:
var query = from t in Tests
select new OTest
{
TestId = t.TestId
};
Вопрос в том, как я могу получить «Подтесты» как часть запроса и как свойство списка в моем основном объекте OTest без LINQ, запускающего сотню подзапросов из основного запроса данных.
Если я сделал это так, он будет выполнять запрос для каждой возвращаемой записи, что не очень практично:
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()
};
Есть какие-нибудь мысли о том, как мне получить свойство List для заполнения одним запросом? Возможно с левыми соединениями?
Любая помощь будет оценена.
Если вам нужны какие-либо разъяснения, пожалуйста, спросите меня.
EDIT
Хорошо, если взглянуть на это, оно работает, когда у меня есть 1 подсписок, но как только я добавляю 2-й, 2-й раз запрашивает базу данных 100 раз. Вот мой точный запрос:
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 для таблицы атрибутов.
Спасибо