private void GenerateUniversalProviderList(CorporateAccount account, string destinationFile)
        {
            var pageNumber = 1;

            while (true)
            {
                var filter = new UniversalProviderListModelFilter
                {
                    Tag       = account.Tag,
                    AccountId = account.Id
                };

                int totalRecords = 0;
                var primaryCarePhysicaianCollection = _primaryCarePhysicianRepository.GetPrimaryCarePhysicians(filter, pageNumber, PageSize, out totalRecords);

                if (!primaryCarePhysicaianCollection.IsNullOrEmpty())
                {
                    var collection = new List <UniversalProviderViewModel>();

                    foreach (var primaryCarePhysician in primaryCarePhysicaianCollection)
                    {
                        var model = GetProviderViewModel(primaryCarePhysician, account);

                        collection.Add(model);
                    }

                    WriteCsv(collection, destinationFile);

                    _logger.Info((pageNumber * PageSize) + " out of " + totalRecords + " completed");
                }

                if ((pageNumber * PageSize) >= totalRecords)
                {
                    break;
                }

                pageNumber++;
            }
        }
        public IEnumerable <PrimaryCarePhysician> GetPrimaryCarePhysicians(UniversalProviderListModelFilter filter, int pageNumber, int pageSize, out int totalRecords)
        {
            using (var adapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(adapter);

                var eligibleCustomers = (from ce in linqMetaData.CustomerEligibility
                                         where ce.IsEligible.HasValue && ce.IsEligible.Value && ce.ForYear == DateTime.Today.Year
                                         select ce.CustomerId);

                var customerIds = (from cp in linqMetaData.CustomerProfile
                                   where cp.Tag == filter.Tag && eligibleCustomers.Contains(cp.CustomerId)
                                   select cp.CustomerId);

                var query = (from cpcp in linqMetaData.CustomerPrimaryCarePhysician
                             where cpcp.IsActive == true && customerIds.Contains(cpcp.CustomerId)
                             select cpcp);

                totalRecords = (from cpcp in query select cpcp.CustomerId).Count();

                var entities = query.OrderBy(x => x.PrimaryCarePhysicianId).TakePage(pageNumber, pageSize).ToArray();


                var primaryCarephysicians = _mapper.MapMultiple(entities);

                var addressIds = primaryCarephysicians.Where(pcp => pcp.Address != null).Select(pcp => pcp.Address.Id).ToList();
                var addresses  = _addressRepository.GetAddresses(addressIds);

                foreach (var primaryCarephysician in primaryCarephysicians)
                {
                    primaryCarephysician.Address = primaryCarephysician.Address != null
                                                       ? addresses.Where(a => a.Id == primaryCarephysician.Address.Id).
                                                   Select(a => a).Single()
                                                       : primaryCarephysician.Address;
                }

                return(primaryCarephysicians);
            }
        }