/// <summary> /// Gets the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Task{ItemsResult}.</returns> protected ItemsResult GetResult(GetItemsByName request) { User user = null; BaseItem item; List <BaseItem> libraryItems; if (request.UserId.HasValue) { user = UserManager.GetUserById(request.UserId.Value); item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId); libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList(); } else { item = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : LibraryManager.GetItemById(request.ParentId); libraryItems = LibraryManager.RootFolder.RecursiveChildren.ToList(); } IEnumerable <BaseItem> items; if (item.IsFolder) { var folder = (Folder)item; if (request.UserId.HasValue) { items = request.Recursive ? folder.GetRecursiveChildren(user) : folder.GetChildren(user, true); } else { items = request.Recursive ? folder.GetRecursiveChildren() : folder.Children; } } else { items = new[] { item }; } items = FilterItems(request, items); var extractedItems = GetAllItems(request, items); var filteredItems = FilterItems(request, extractedItems, user); filteredItems = FilterByLibraryItems(request, filteredItems, user, libraryItems); filteredItems = LibraryManager.Sort(filteredItems, user, request.GetOrderBy(), request.SortOrder ?? SortOrder.Ascending).Cast <TItemType>(); var ibnItemsArray = filteredItems.ToList(); IEnumerable <TItemType> ibnItems = ibnItemsArray; var result = new ItemsResult { TotalRecordCount = ibnItemsArray.Count }; if (request.StartIndex.HasValue || request.Limit.HasValue) { if (request.StartIndex.HasValue) { ibnItems = ibnItems.Skip(request.StartIndex.Value); } if (request.Limit.HasValue) { ibnItems = ibnItems.Take(request.Limit.Value); } } var tuples = ibnItems.Select(i => new Tuple <TItemType, List <BaseItem> >(i, i.GetTaggedItems(libraryItems).ToList())); var dtoOptions = request.GetDtoOptions(); var dtos = tuples.Select(i => GetDto(i.Item1, user, dtoOptions, i.Item2)); result.Items = dtos.Where(i => i != null).ToArray(); return(result); }