Just change the conditions that you are querying on. I'm converting your FindAll to a Where clause as I know that works for nested queries.
I'm also converting this to a method, since as a property the possibility exists that ddlCertificate has a null value, which will cause an exception if the property is called prematurely. Just call your parse on the selectedValue before passing it to the method.
private List<CandidateInfo> Candidates(long selected)
{
return CandidateController.Instance.All
.Where(item =>
item.Center.ID == ExamSession.Center.ID &&
item.CandidateCertificates.Any(cert => cert.CertificationID == selected))
.ToList();
}
The key here is that (assuming you're running off a sensible ORM) this will be pushed down the pipe as a single query, returned as a single result, and not looped over by the application, sparing some cycles