Цикл foreach до тех пор, пока я == x

Я хочу запустить цикл foreach, как только i > x Я пробовал цикл while перед foreach Сделать цикл Но foreach все равно работает, даже если я был равен Я не могу понять, как мне это запустить

Мне нужно, чтобы он запустился 9999 раз, затем сделал что-то, а затем начал все сначала со следующего 9999 и так далее.

Я обновил весь код Мне нужно проверить все строки в таблице данных с размером пакета 9999 на данный момент, а затем запустить restsharp и затем перейти к следующему 9999.

Когда все строки в таблице данных будут готовы, мне нужно перейти к запросу sql и запустить следующий запрос, а затем новую таблицу данных и тот же размер пакета 9999.

Пожалуйста помоги

Это мой код

        protected void run_Click1(object sender, ImageClickEventArgs e)
        {
            var body = "";
            string[] evenNums = new string[3];
            evenNums[0] = "2";
            evenNums[1] = "3";
            evenNums[2] = "4";
            var daytime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss", CultureInfo.GetCultureInfo("sv-SE"));
            var day = DateTime.Now.ToString("yyyyMMdd", CultureInfo.GetCultureInfo("sv-SE"));
            foreach (string Site in evenNums)
            {
                body = "{\"requestId\": \"144x25\",\"items\": [";


                using (SqlConnection con = new SqlConnection())
                {
                    string conn_str = ConfigurationManager.ConnectionStrings["SqlConnection1"].ConnectionString;
                    SqlConnection conn = new SqlConnection(conn_str);

                    string query = "SELECT [number],[surname],[forename],[emailAddress],[taxIdentifier] FROM[Customer]  WITH(NOLOCK) WHERE[CustomerID] IN(SELECT[CustomerID] FROM[Visit] WITH(NOLOCK) WHERE[GamingDate] Between convert(Date, DATEADD(DAY, -365, GETDATE())) AND convert(Date, getdate())) AND(EmailAddress IS NOT NULL) AND(ContactTypes & 1 = 1) AND(HomePropertyID = " + Site + ") /*  2= Malmö  3=Göteborg  4=Stockholm  */ AND(LEN(TaxIdentifier) = '12')";

                    SqlCommand comm = new SqlCommand(query, conn);

                    conn.Open();
                    comm.ExecuteNonQuery();
                    DataTable dt1 = new DataTable();

                    using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
                    {
                        adapter.Fill(dt1);
                    }

                    string newFileName = "C:\\temp\\" + ort + "" + day + "FromNeon_Cleaned.csv";
                    string clientHeader = "number" + "," + "\"surname\"" + "," + "\"forename\"" + "," + "\"repsonseId\"" + "," + "\"responseTime\"" + Environment.NewLine;
                    File.WriteAllText(newFileName, clientHeader);


                    int batchSize = 2;
                    bool willBreak = false;

                    for (int i = 0; i < batchSize; i++)
                    {
                        for (int j = 0; j < dt1.Rows.Count; j++)
                        {
                            DataRow dtRow = dt1.Rows[j];

                            if (i == j)
                            {
                                break; // in there what you want as I understand
                               willBreak = true;
                            }

                            var number = dtRow.ItemArray[0];
                            var surname = dtRow.ItemArray[1];
                            var forename = dtRow.ItemArray[2];
                            var emailAddress = dtRow.ItemArray[3];
                            string taxidentifier = (string)dtRow.ItemArray[4];
                            //string taxidentifier = "2211221143";

                            if (Personnummer.Valid(taxidentifier))
                            {

                                body += "{\"itemId\": \"" + number + "\",\"subjectId\": \"" + taxidentifier + "\"},";

                            }

                            body = body.Remove(body.Length - 1);
                            body += "]}";
                        }
                        if (willBreak) break;
                    }



                    var url = "https://marketing.spelpaus.se/api/marketing-subjectid/mw41yZpBFC";
                    var client = new RestClient(url);
                    var request = new RestRequest(url, Method.Post);
                    request.AddHeader("authorization", "vGrpkoNEWHpMuQVrIKVGfsfx2l7SLbsSfQ7PbISjMyiK545ezHW5BzsfPgJq0HA6");
                    request.AddHeader("Content-Type", "application/json");

                    //var bodyy = JsonConvert.SerializeObject(body);
                    request.AddBody(body, "application/json");
                    RestResponse response = client.Execute(request);

                    if (response.StatusCode == HttpStatusCode.OK)

                    {
                        var obj = JsonConvert.DeserializeObject<dynamic>(response.Content);

                        var alloweditemsdata = (obj.allowedItemIds);
                        var responseId = (obj.responseId);

                        //var responseId1= Convert.ToInt32(responseId.value);
                        dt1.PrimaryKey = new DataColumn[] { dt1.Columns["number"] };


                        foreach (int alloweditem in alloweditemsdata)
                        {
                            DataRow Drw = dt1.Rows.Find(alloweditem);

                            var numberresult = Drw.ItemArray[0];
                            var surnameresult = Drw.ItemArray[1];
                            var forenameresult = Drw.ItemArray[2];
                            var emailAddressresult = Drw.ItemArray[3];
                            string taxidentifierresult = (string)Drw.ItemArray[4];


                            string clientDetails = " " + numberresult + ",\"" + surnameresult + "\",\"" + forenameresult + "\",\"" + emailAddressresult + "\",\"" + responseId + "\",\"" + daytime + "\"" + Environment.NewLine;

                            File.AppendAllText(newFileName, clientDetails, Encoding.Unicode);

                        }

                    }

                
                    
                }
            }
        }

Прочтите документ: Learn.microsoft.com/en-us/dotnet/csharp/language-reference/…

Poul Bak 23.09.2023 19:44

Если вы не хотите запускать код, когда i==j, используйте if (i != j) { code goes here } вместо прерывания, когда i==j. (Кроме того, var evenNums = new string[3] { "2", "4", "6" }; сэкономит несколько строк.)

Andrew Morton 23.09.2023 23:31

HomePropertyID в базе данных — это строка или число?

Andrew Morton 23.09.2023 23:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если мы предпочитаем циклы for вместо циклов while, мы сможем лучше понять, в скольких циклах мы находимся, поэтому я переписал ваш код с помощью цикла for, и если i == x истинно, я завершил весь цикл прерыванием.

    int batchSize = 2;
    bool willBreak = false;

    for (int i = 0; i < batchSize; i++)
    {
        for (int j = 0; j < dt1.Rows.Count; j++)
        {
            DataRow dtRow = dt1.Rows[j];
            
            if (i == j) {
                break; // in there what you want as I understand
                willBreak=true;
            } 
            
            var number = dtRow.ItemArray[0];
            var surname = dtRow.ItemArray[1];
            var forename = dtRow.ItemArray[2];
            var emailAddress = dtRow.ItemArray[3];
            string taxidentifier = (string)dtRow.ItemArray[4];
            //string taxidentifier = "2211221143";

            if (Personnummer.Valid(taxidentifier))
            {

                body += "{\"itemId\": \"" + number + "\",\"subjectId\": \"" + taxidentifier + "\"},";

            }

            body = body.Remove(body.Length - 1);
            body += "]}";
        }
        if (willBreak) break;
    }

Если я сломаюсь, как код, которым вы поделились, вернусь ли я, чтобы получить следующие 2? Получение ошибки willBreak = True; Обнаружен недостижимый код

NiclasNilsson 23.09.2023 22:33
Ответ принят как подходящий

У вас есть 2 вложенных цикла for: внешний с переменной цикла i и внутренний с переменной цикла j. Но на самом деле вы нигде не используете i, кроме как для break.

Результат следующий:

  • Внутренний j-цикл сначала сразу же прерывается, когда j==0, поскольку значение i равно 0.
  • Внутренний j-цикл перезапускается из-за внешнего i-цикла, теперь он прерывается, когда j==1, потому что теперь значение i равно 1.
  • Он перезапускается снова и теперь прерывается, когда j==2.
  • И т. д.
  • И т. д.
  • Пока, наконец, цикл i не завершится, потому что он достиг значения batchsize.

Это действительно странно и похоже на ошибку. Я подозреваю, что цикл i вам вообще не нужен, поэтому предлагаю вам удалить его и вместо этого сделать что-то вроде if (j == batchsize) { break; } внутри цикла j.

Питер Б. Это было мое предложение с этого форума. Я попробовал и забыл, что изменил код, прежде чем редактировать свое сообщение.

NiclasNilsson 24.09.2023 14:13

Петр Б, как бы ты порекомендовал петли, чтобы подошло как нужно, спасибо

NiclasNilsson 24.09.2023 14:18

Теперь у меня есть этот шаг. но после того, как я запустил пакетный размер, он ломается и выполняет шаги, описанные ниже, но после этого я перехожу к началу, вопрос sql, но мне нужно, чтобы он запускал следующий пакетный размер, пока он не выполнит все строки в таблице данных, есть идеи о том, как мне могу это сделать

NiclasNilsson 25.09.2023 10:19

Лучше всего создать новый вопрос, если после внесения изменений возникнет другая/новая проблема.

Peter B 25.09.2023 10:22

Другие вопросы по теме