public static List <Contact_V03> GetDistributorByFilter(string distributorID, ContactFilter_V01 contactFilterV01)
        {
            var request = new ListContactsByFilterRequest_V01
            {
                ContactFilter = contactFilterV01,
                DistributorID = distributorID
            };

            using (var proxy = ServiceClientProvider.GetDistributorCRMServiceProxy())
            {
                try
                {
                    var response = proxy.ListDistributorByFilter(new ListDistributorByFilterRequest(request)).ListDistributorByFilterResult as ListContactsByOwnerResponse_V01;
                    if (response != null && response.Status == ServiceResponseStatusType.Success)
                    {
                        return(response.Contacts);
                    }
                }
                catch (Exception ex)
                {
                    Log(ex, proxy);
                    return(new List <Contact_V03>());
                }
            }

            return(new List <Contact_V03>());
        }
        private static List <Contact_V03> FilterContacts(string DistributorID,
                                                         ContactFilter_V01 contactFilter,
                                                         List <Contact_V03> allContacts)
        {
            if (contactFilter == null)
            {
                return(new List <Contact_V03>());
            }

            List <int> matchedContactIDs = null;

            if (ValidateContactFilter(contactFilter))
            {
                return(allContacts);
            }

            using (var proxy = ServiceClientProvider.GetDistributorCRMServiceProxy())
            {
                var request = new ListContactsByFilterRequest_V01();

                request.DistributorID = DistributorID;
                request.ContactFilter = contactFilter;

                var response = proxy.ListContactsByFilter(new ListContactsByFilterRequest(request)).ListContactsByFilterResult as ListContactsByFilterResponse_V01;
                if (response != null && response.Status == ServiceResponseStatusType.Success)
                {
                    matchedContactIDs = response.ContactIDs;
                }
                else
                {
                    return(null);
                }
            }

            if (allContacts == null)
            {
                return(null);
            }

            if (matchedContactIDs.Count == 0)
            {
                return(new List <Contact_V03>());
            }

            var result = new List <Contact_V03>();

            var filteredContacts = allContacts.Where(contact => matchedContactIDs.Contains(contact.ContactID));

            if (null != filteredContacts && filteredContacts.Count() > 0)
            {
                result = filteredContacts.ToList();
            }

            return(result);
        }