public async Task<ContactQueryResult> QueryContact(ContactQuery query)
 {
     return query.GetType().Name switch
     {
         nameof(SearchContactQuery) => await HandleSearchQuery((SearchContactQuery)query),
         nameof(ContactQuery) => await HandleQuery((ContactQuery)query),
         _ => throw new NotSupportedException($"{query.GetType().Name} is not supported")
     };
 }
        private async Task<ContactQueryResult> HandleQuery(ContactQuery query)
        {
            IQueryable<contact> contactQuery = essContext.contacts
                  .Expand(c => c.era_City)
                  .Expand(c => c.era_ProvinceState)
                  .Expand(c => c.era_Country)
                  .Expand(c => c.era_MailingCity)
                  .Expand(c => c.era_MailingProvinceState)
                  .Expand(c => c.era_MailingCountry)
                  .Where(c => c.statecode == (int)EntityState.Active);

            if (!string.IsNullOrEmpty(query.ContactId)) contactQuery = contactQuery.Where(c => c.contactid == Guid.Parse(query.ContactId));
            if (!string.IsNullOrEmpty(query.UserId)) contactQuery = contactQuery.Where(c => c.era_bcservicescardid.Equals(query.UserId, StringComparison.OrdinalIgnoreCase));

            var contacts = await ((DataServiceQuery<contact>)contactQuery).GetAllPagesAsync();

            essContext.DetachAll();

            return new ContactQueryResult { Items = mapper.Map<IEnumerable<Contact>>(contacts, opt => opt.Items["MaskSecurityAnswers"] = query.MaskSecurityAnswers.ToString()) };
        }