У меня есть следующая структура:
Страна A | _Questionnaire 1
| _Result 1
Страна B | _Questionnaire 3
| _Result 3
Страна C | _Questionnaire 5
| _Result 5
Страна? имеют тип страницы CMS.folder , и вопросник, и результат имеют тип страницы CMS.file и содержат одно вложение (PDF). Я пытаюсь получить доступ к сведениям вложения (имя, Guid, размер) в каждой публикации, доступной в папке.
Я пробовал следующее
.Select(m => new
{
Country = m.DocumentName,
questionnaire = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Questionnaire")).Select(s => s.GetValue("PDF")),
result = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Result")).Select(s => s.GetValue("PDF"))
})
.ToList();
Я могу получить GUID вложения доступны в файле анкеты для каждой папки, но я не могу получить значение результата, так как повторение WithAllData дважды предотвращает это. Как я могу также получить доступ к размеру и названию вложения? Я попытался включить AttachmentSize or AttachmentName
, но у меня не было успеха с дочерними узлами текущего узла.
Как лучше всего делать то, что я пытаюсь сделать?
----- ----------- Обновление ------------------------------
Как и предлагалось Вот что я попробовал:
.Select(m => new
{
Country = m.DocumentName,
questionnaire = GetDocs(m.Children.Where(w => w.DocumentName.Contains("Questionnaire")).FirstOrDefault()),
result = GetDocs(m.Children.Where(w => w.DocumentName.Contains("Result")).FirstOrDefault())
})
.ToList();
private PublicationSimpleDto GetDocs(TreeNode tree)
{
PublicationSimpleDto publication = null;
if (tree != null)
{
foreach (DocumentAttachment attachment in tree.Attachments)
{
publication = new PublicationSimpleDto()
{
Title = attachment.AttachmentTitle,
Extension = attachment.AttachmentExtension.Replace(".", "").ToUpper(),
AttachmentUrl = attachment.AttachmentGUID.ToString(),
Size = attachment.AttachmentSize
};
}
}
return publication;
}
Однако результат не улавливается, кажется, что я не могу повторить .children
несколько раз. Это была та же проблема с:
questionnaire = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Questionnaire")).Select(s => s.GetValue("PDF")),
result = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Result")).Select(s => s.GetValue("PDF"))
Использование прямого GUID вложения вместо TreeNode страницы звучало проще, но я не могу это сделать.