ISearchFilter that would update the built database query, a request model with ISearchFilter[] which I'd loop through to apply the filters. The thing is that the ASP.NET Core binding system will have to instantiate the right implementations of ISearchFilter by the name given in the request body, and then there's the question of how bad would be dynamic queries like this in EF Core?