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()) }; }