You can include parameter checking into query
from p in context.Persons
where (taxId == "" || p.TaxId.StartsWith(taxId)) &&
(personalId == "" || p.PersonalId.StartsWith(personalId)) &&
(certificate == "" || p.Certificate.StartsWith(certificate))
select p
Or build query dynamically
IQueryable<Person> query = context.Persons;
if (taxId != "")
query = query.Where(p => p.TaxId.StartsWith(taxId));
if (personalId != "")
query = query.Where(p => p.PersonalId.StartsWith(personalId));
if (certificate != "")
query = query.Where(p => p.Certificate.StartsWith(certificate));
// etc
var people = query.ToList();
Consider also to use String.IsNullOrEmpty
to verify if parameter has value.
If you need to generate LIKE '%' + @param + '%'
query, then use Contains
instead of StartsWith
.