public async Task <IEnumerable <SeriesLookupItem> > GetSeriesLookupAsync(string viewModelName, SeriesMaintenanceFilterCondition seriesMaintenanceFilterCondition = SeriesMaintenanceFilterCondition.NoFilter, SeriesFilterCondition filterCondition = SeriesFilterCondition.NoFilter) { var maintenanceFilterCondition = GetMaintenanceFilterCondition(seriesMaintenanceFilterCondition); var condition = GetFilterCondition(filterCondition); var filter = maintenanceFilterCondition.And(condition); await using var ctx = _contextCreator(); return(await ctx.Series .Include(b => b.Books) .ThenInclude(b => b.Book) .ThenInclude(b => b.Formats) .AsNoTracking() .Where(filter) .OrderBy(s => s.Name) .Select(s => new SeriesLookupItem { Id = s.Id, DisplayMember = s.Name, Picture = GetPictureThumbnail(s.PicturePath) ?? _placeholderPic, ViewModelName = viewModelName, InfoText = GetInfoText(s), SeriesState = GetSeriesState(s) }) .ToListAsync());
static Expression <Func <Series, bool> > GetMaintenanceFilterCondition(SeriesMaintenanceFilterCondition condition) { return(condition switch { SeriesMaintenanceFilterCondition.NoFilter => p => true, SeriesMaintenanceFilterCondition.NoDescription => p => string.IsNullOrEmpty(p.Description), SeriesMaintenanceFilterCondition.NoBooks => p => p.Books.Count == 0, SeriesMaintenanceFilterCondition.NoPicture => p => p.PicturePath.Contains("placeholder"), _ => throw new ArgumentOutOfRangeException(nameof(condition), "Invalid filter condition!") });