public async Task <ApiResponse <List <T> > > FindNetmeraContents <T>(string table, string idField, List <string> idValues)
        {
            NetmeraService service = new NetmeraService(table);

            service.whereContainedIn(idField, idValues);

            var items = await SearchObjects <T>(service);

            return(items);
        }
        void ImportSurveyoyr(string surveyorId, SqlConnection connection)
        {
            var addressService = new NetmeraService("Address_List1");

            addressService.whereEqual("Surveyor", surveyorId);

            var surveyor = DbContext.Surveyors.First(x => x.NetmeraId == surveyorId);


            SearchObjectsWithPaging <Address, AddressOld>(addressService, (db, s) =>
            {
                db.NetmeraId   = s.AddressID;
                db.SurveyorId  = surveyor.Id;
                db.TypeUpdated = s.PTUpdated;
                db.IsCompleted = s.Complete;
                db.UpdateDate  = db.CreateDate;

                var status         = new AddressStatus();
                status.IsCompleted = s.Complete;
                status.AddressId   = db.Id;

                return(false);
            });


            var downloadedAddresses = DbContext.Addresses.Where(x => x.SurveyorId == surveyor.Id).ToList();
            var page = 100;

            for (int i = 0; i < downloadedAddresses.Count; i = i + page)
            {
                var addresses = downloadedAddresses.Skip(i).Take(page);

                var service = new NetmeraService("Survelem");

                service.whereContainedIn("UPRN", addresses.Select(x => x.UPRN).ToList());

                ProcessSurvelems(service, connection);
            }
        }
        async Task <ApiResponse <Address> > ExecuteSyncUserData(long userId)
        {
            var surveyTypes = await SearchObjects <SurveyTypes>(new NetmeraService("SurveyTypes"));

            if (surveyTypes.IsSuccess)
            {
                await new DbService().ClearTable <SurveyTypes>();

                foreach (var surveyTypese in surveyTypes.Data.Distinct())
                {
                    surveyTypese.Identity = surveyTypese.ID;
                    await new DbService().Save(surveyTypese);
                }
            }
            else
            {
                return(new ApiResponse <Address>()
                {
                    IsSuccess = false
                });
            }


            var foundCustomers = await GetCustomers(userId);

            foreach (var foundCustomer in foundCustomers)
            {
                foundCustomer.Identity = foundCustomer.CustomerID.ToString();
                await new DbService().Save(foundCustomer);
            }

            NetmeraService service2 = new NetmeraService("Address_List1");

            service2.whereEqual("Surveyor", userId.ToString());
            service2.whereEqual("Complete", false);


            //var addresses = await SearchObjects<Address>(service2);
            var addresses = await SearchObjectsWithPaging <Address>(service2);

            var downloadedAddresses = new List <Address>();

            if (addresses.IsSuccess)
            {
                var insert = new List <Address>();
                foreach (var address in addresses.Data)
                {
                    if (foundCustomers.Any(x => x.CustomerSurveyID.ToString() == address.CustomerSurveyID.ToString()))
                    {
                        address.Identity = address.AddressID;

                        if (string.IsNullOrEmpty(address.FullAddress))
                        {
                            address.FullAddress = "";
                        }

                        if (!insert.Any(x => x.Identity == address.Identity))
                        {
                            insert.Add(address);
                            downloadedAddresses.Add(address);
                        }
                    }
                }

                await new DbService().Insert(insert);
            }
            else
            {
                return(new ApiResponse <Address>()
                {
                    IsSuccess = false
                });
            }


            var r = await DownloadQuestionsAndOptions(foundCustomers);

            if (!r.IsSuccess)
            {
                return(r);
            }
            //var questions = await SearchObjects<Question>(new NetmeraService("Questions"));
            //var questions = await SearchObjectsWithPaging<Question>(new NetmeraService("Questions"));

            //if (questions.IsSuccess)
            //{
            //    var insert = new List<Question>();
            //    foreach (var question in questions.Data)
            //    {
            //        if (foundCustomers.Any(x => x.CustomerSurveyID == question.CustomerSurveyID))
            //        {
            //            question.Identity = question.Question_Ref;
            //            if (!insert.Any(x => x.Identity == question.Identity))
            //                insert.Add(question);

            //        }
            //    }

            //    await new DbService().Insert(insert);
            //}
            //else
            //{
            //    return new ApiResponse<Address>() { IsSuccess = false };
            //}

            //var options = await SearchObjectsWithPaging<Option>(new NetmeraService("Options"));
            ////var options = await SearchObjects<Option>(new NetmeraService("Options"));

            //if (options.IsSuccess)
            //{
            //    var insert = new List<Option>();
            //    foreach (var option in options.Data)
            //    {
            //        if (foundCustomers.Any(x => x.CustomerSurveyID == option.CustomerSurveyID))
            //        {
            //            option.Identity = option.OptionId;
            //            if (!insert.Any(x => x.Identity == option.Identity))
            //                insert.Add(option);


            //        }
            //    }
            //    await new DbService().Insert(insert);
            //}
            //else
            //{
            //    return new ApiResponse<Address>() { IsSuccess = false };
            //}



            var media = await SearchObjects <RichMedia>(new NetmeraService("RichMedia"));

            if (media.IsSuccess)
            {
                var insert = new List <RichMedia>();
                foreach (var option in media.Data)
                {
                    if (foundCustomers.Any(x => x.CustomerSurveyID == option.CustomerSurveyID))
                    {
                        option.Identity = option.ID;
                        if (!insert.Any(x => x.Identity == option.Identity))
                        {
                            insert.Add(option);
                        }
                    }
                }
                await new DbService().Insert(insert);
            }
            else
            {
                return(new ApiResponse <Address>()
                {
                    IsSuccess = false
                });
            }

            var page = 100;

            for (int i = 0; i < downloadedAddresses.Count; i = i + page)
            {
                var survelemSearch = new NetmeraService("Survelem");

                survelemSearch.whereContainedIn("UPRN", downloadedAddresses.Skip(i).Take(page).Select(x => x.UPRN).ToList());

                //var survelems = await SearchObjects<Survelem>(survelemSearch);
                var survelems = await SearchObjectsWithPaging <Survelem>(survelemSearch);

                if (survelems.IsSuccess)
                {
                    var insert = new List <Survelem>();
                    foreach (var option in survelems.Data)
                    {
                        if (foundCustomers.Any(x => x.CustomerSurveyID == option.CustomerSurveyID))
                        {
                            option.Identity = option.id;
                            if (!insert.Any(x => x.Identity == option.Identity))
                            {
                                insert.Add(option);
                            }
                        }
                    }
                    await new DbService().Insert(insert);
                }
                else
                {
                    return(new ApiResponse <Address>()
                    {
                        IsSuccess = false
                    });
                }
            }



            var survelemMaps = await SearchObjects <SurvelemMap>(new NetmeraService("TblSurvelemMap"));

            if (survelemMaps.IsSuccess)
            {
                var insert = new List <SurvelemMap>();
                foreach (var option in survelemMaps.Data)
                {
                    if (foundCustomers.Any(x => x.CustomerSurveyID == option.CustomerSurveyID))
                    {
                        option.Identity = option.SvmMapID;
                        if (!insert.Any(x => x.Identity == option.Identity))
                        {
                            insert.Add(option);
                        }
                    }
                }
                await new DbService().Insert(insert);
            }
            else
            {
                return(new ApiResponse <Address>()
                {
                    IsSuccess = false
                });
            }

            return(new ApiResponse <Address>()
            {
                IsSuccess = true
            });
        }