Filter data with optional parameters
IEnumerable&lt;Registration&gt; all = All(); // &lt;-- this gets all registrations from 
                                       //       the database.



This looks like a really bad idea. Why are you getting all data from the database first and not filter it before retrieving? 


where r.FirstName.ToLower().StartsWith(voornaam.ToLower().Trim())



Most databases are case insensitive so you wouldn't need this formatting adjustment if you used server side filtering. 

On the client it's better to use the StrigComparer.XIgnoreCase where the X is either the InvariantCulture or Ordinal then ToUpper/Lower because on the one hand it better communicates the intention that you are performing a case-insensitive comparison (which is not that obvious if you use ToUpper/Lower - you might be just fixing the case for whatever reason) and on the other hand you don't have to change the case twice which might introduce a new bug if you call ToUpper for the first string and ToLower for the other one or forget it altogether.

If you use EF or any other ORM you should filter the data on the server and not after downloading everything. With large databases this would be such a waste of resources.

If All is backed by Entity Framework then you could return an IQueryable and still take the advantange of a server query.

Why don't you use english variables names? Everything is in english but the parameters. This is not consistant... and it's difficult to get help with local names.