static Expression <Func <Author, bool> > GetFilterCondition(AuthorMaintenanceFilterCondition condition)
 {
     return(condition switch
     {
         AuthorMaintenanceFilterCondition.NoFilter => a => true,
         AuthorMaintenanceFilterCondition.NoBio => a => string.IsNullOrEmpty(a.Biography),
         AuthorMaintenanceFilterCondition.NoBooks => a => a.Books.Count == 0,
         AuthorMaintenanceFilterCondition.NoDateOfBirth => a => a.DateOfBirth.Equals((DateTime?)null),
         AuthorMaintenanceFilterCondition.NoNationality => a => a.Nationality.Equals(null),
         AuthorMaintenanceFilterCondition.NoMugshot => a => a.MugshotPath.Contains("placeholder"),
         _ => throw new ArgumentOutOfRangeException(nameof(condition), "Invalid filter condition!")
     });
        public async Task <IEnumerable <LookupItem> > GetAuthorLookupAsync(string viewModelName,
                                                                           AuthorMaintenanceFilterCondition authorMaintenanceFilterCondition = AuthorMaintenanceFilterCondition.NoFilter)
        {
            var filter = GetFilterCondition(authorMaintenanceFilterCondition);

            await using var ctx = _contextCreator();
            return(await ctx.Authors
                   .AsNoTracking()
                   .Where(filter)
                   .OrderBy(a => a.LastName)
                   .Select(a =>
                           new LookupItem
            {
                Id = a.Id,
                DisplayMember = $"{a.LastName}, {a.FirstName}",
                Picture = GetPictureThumbnail(a.MugshotPath) ?? _placeholderPic,
                ViewModelName = viewModelName,
                InfoText = $"Books: {a.Books.Count}",
            })
                   .ToListAsync());