Vracím se k tomu znovu po 4 letech, protože zatímco moje původní domněnka fungovala, fungovala špatně, což bylo stažení všech záznamů z Monga a následné filtrování v paměti a ke složeným záležitostem to dělalo synchronní volání do databáze, což je vždy špatný nápad.
Kouzlo se odehrává v metodě rozšíření rozšíření LinqKit
To zplošťuje strom výrazů vyvolání na něco, čemu může řidič Mongo porozumět a podle toho jednat.
.Where(predicate.Expand())