public IReadOnlyCollection <FolderEntryViewModel> Create(IReadOnlyCollection <DirectoryDto> dtos)
        {
            var root       = new FolderEntryViewModel(FolderEntryViewModelType.Directory, string.Empty, string.Empty, string.Empty, string.Empty);
            var sortedDtos = dtos.OrderBy(f => f.DirectoryName);

            foreach (var directory in sortedDtos)
            {
                CreateTreeViewItemsRecursive(directory, root, true);
            }

            return(root.SubEntries);
        }
        private void CreateTreeViewItemsRecursive(DirectoryDto directory, FolderEntryViewModel parentVm, bool isTopLevel)
        {
            var directoryVm = CreateFromDirectory(directory, isTopLevel);

            // Add the Files as SubEntries
            var fileViewModels = directory
                                 .Files
                                 .Select(CreateFromFile)
                                 .OrderBy(f => f.Name)
                                 .ToList();

            directoryVm.SubEntries.AddRange(fileViewModels);

            // Add the Directory as SubEntry
            parentVm.SubEntries.Add(directoryVm);

            foreach (var subDirectory in directory.SubDirectories)
            {
                CreateTreeViewItemsRecursive(subDirectory, directoryVm, false);
            }
        }