FilterByPredicate(hash,x=>x.ForeignBookId,localHash,profile,(x,p)=>!p.SkipMissingDate||x.ReleaseDate.HasValue,"release date is missing");
FilterByPredicate(hash,x=>x.ForeignBookId,localHash,profile,(x,p)=>!p.SkipPartsAndSets||!IsPartOrSet(x,seriesLinks.GetValueOrDefault(x),titles),"book is part of set");
FilterByPredicate(hash,x=>x.ForeignBookId,localHash,profile,(x,p)=>!p.SkipSeriesSecondary||!seriesLinks.ContainsKey(x)||seriesLinks[x].Any(y=>y.IsPrimary),"book is a secondary series item");
FilterByPredicate(hash,x=>x.ForeignBookId,localHash,profile,(x,p)=>x.Editions.Value.Any(e=>e.PageCount>p.MinPages)||x.Editions.Value.All(e=>e.PageCount==0),"minimum page count not met");
FilterByPredicate(hash,x=>x.ForeignEditionId,localHash,profile,(x,p)=>!allowedLanguages.Any()||allowedLanguages.Contains(x.Language?.ToLower()??"null"),"edition language not allowed");
FilterByPredicate(hash,x=>x.ForeignEditionId,localHash,profile,(x,p)=>!p.SkipMissingIsbn||x.Isbn13.IsNotNullOrWhiteSpace()||x.Asin.IsNotNullOrWhiteSpace(),"isbn and asin is missing");