/// <summary> /// Filters the items. /// </summary> /// <param name="request">The request.</param> /// <param name="items">The items.</param> /// <param name="user">The user.</param> /// <returns>IEnumerable{`0}.</returns> private IEnumerable <BaseItem> FilterItems(GetItemsByName request, IEnumerable <BaseItem> items, User user) { if (!string.IsNullOrEmpty(request.NameStartsWithOrGreater)) { items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1); } if (!string.IsNullOrEmpty(request.NameStartsWith)) { items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0); } if (!string.IsNullOrEmpty(request.NameLessThan)) { items = items.Where(i => string.Compare(request.NameLessThan, i.SortName, StringComparison.CurrentCultureIgnoreCase) == 1); } var imageTypes = request.GetImageTypes().ToList(); if (imageTypes.Count > 0) { items = items.Where(item => imageTypes.Any(item.HasImage)); } var filters = request.GetFilters().ToList(); if (filters.Contains(ItemFilter.Dislikes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user, i); return(userdata != null && userdata.Likes.HasValue && !userdata.Likes.Value); }); } if (filters.Contains(ItemFilter.Likes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user, i); return(userdata != null && userdata.Likes.HasValue && userdata.Likes.Value); }); } if (filters.Contains(ItemFilter.IsFavoriteOrLikes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user, i); var likes = userdata.Likes ?? false; var favorite = userdata.IsFavorite; return(likes || favorite); }); } if (filters.Contains(ItemFilter.IsFavorite)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user, i); return(userdata != null && userdata.IsFavorite); }); } // Avoid implicitly captured closure var currentRequest = request; return(items.Where(i => ApplyAdditionalFilters(currentRequest, i, user, false))); }
/// <summary> /// Filters the items. /// </summary> /// <param name="request">The request.</param> /// <param name="items">The items.</param> /// <param name="user">The user.</param> /// <returns>IEnumerable{`0}.</returns> private IEnumerable <TItemType> FilterItems(GetItemsByName request, IEnumerable <TItemType> items, User user) { if (!string.IsNullOrEmpty(request.NameStartsWithOrGreater)) { items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1); } if (!string.IsNullOrEmpty(request.NameStartsWith)) { items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0); } if (!string.IsNullOrEmpty(request.NameLessThan)) { items = items.Where(i => string.Compare(request.NameLessThan, i.SortName, StringComparison.CurrentCultureIgnoreCase) == 1); } var imageTypes = request.GetImageTypes().ToList(); if (imageTypes.Count > 0) { items = items.Where(item => imageTypes.Any(imageType => ItemsService.HasImage(item, imageType))); } var filters = request.GetFilters().ToList(); if (filters.Count == 0) { return(items); } items = items.AsParallel(); if (filters.Contains(ItemFilter.Dislikes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); return(userdata != null && userdata.Likes.HasValue && !userdata.Likes.Value); }); } if (filters.Contains(ItemFilter.Likes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); return(userdata != null && userdata.Likes.HasValue && userdata.Likes.Value); }); } if (filters.Contains(ItemFilter.IsFavoriteOrLikes)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); var likes = userdata.Likes ?? false; var favorite = userdata.IsFavorite; return(likes || favorite); }); } if (filters.Contains(ItemFilter.IsFavorite)) { items = items.Where(i => { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); return(userdata != null && userdata.IsFavorite); }); } return(items.AsEnumerable()); }