Due to deferred execution, you can piece your query together more dynamically:
var query = context.Hospitals;
if (HospitalIDsByState.Any())
query = query.Where(h => HospitalIDsByState.Contains(h.state));
if (HospitalIDsByCity.Any())
query = query.Where(h => HospitalIDsByCity.Contains(h.city));
if (HospitalIDsByZipcodes.Any())
query = query.Where(h => HospitalIDsByZipcodes(h.zipcode));
return query;
The advantage here is that only the relevant query parts are pushed to your database and you don't end up checking things that you don't need to.