Виктор, день добрый!
Хотел бы вставить свои 5 копеек. Во-первых, в методе GetLinkedFiles создаваемый логический фильтр нигде не используется, во-вторых, метод возвращает список RevitLinkType, а для некоторых задач, все-таки, требуется RevitLinkInstance, т.к. один загруженный файл может использоваться в проекте несколько раз.
Код для такой цели:
public IEnumerable<Document> GetLinkedDocuments(Document doc)
{
var categoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_RvtLinks);
var typeFilter = new ElementClassFilter(typeof(Instance));
var logicalFilter = new LogicalAndFilter(categoryFilter, typeFilter);
var collector = new FilteredElementCollector(doc);
var linkInstances = collector
.WherePasses(logicalFilter)
.OfType<RevitLinkInstance>();
return linkInstances
.Where(x => RevitLinkType.IsLoaded(doc, x.GetTypeId())) // Это проверка того, что связанный документ не выгружен
.Select(x => x.Document);
}
Еще раз повторюсь, что этот код может вернуть один документ несколько раз, если загруженный файл используется в проекте несколько раз
Кроме того, мне не очень нравится фильтр .Where(d => linkedFileNames.Any(fileName => d.PathName.Contains(fileName))), в каком-то, пусть минимально возможном проценте случаев этот код - источник потенциальных проблем. Проще и надежнее сделать Distinct для результатов вышеприведенного метода