循环遍历多个数组以连接

本文关键字:连接 数组 遍历 循环 | 更新日期: 2023-09-27 18:08:05

我有3个数组。两个是字符串数组,一个是日期/时间数组。我从用户输入中提取了全部3个。每个数组总是有相同数量的元素,所以我想做的是能够一次遍历所有3个元素来生成一个字符串。

I was trying:

        List<string> results = new List<string>();
        // select
        foreach (string line in array1)
        {
            foreach (string lines in array2)
            {
                foreach (DateTime date in datearray1)
                {
                    results.Add("select * from table1 d, table2 c where d.specheader = c.specheader and c.true_false = true and d.number = " + lines.ToString() + " and d.date = '" + date.ToShortDateString() + "' and d.specnum like '%" + line.ToString() + "';");                        
                }
            }
        }
        results.ToArray();
        foreach (string line in results)
        {
            MessageBox.Show(line);
        }

用户键入信息到3个框,我只是试图根据输入连接sql语句。然而,当我尝试这样做时,当我只有2个条目时,它循环了6次。是否有一种方法可以同时使用所有三个数组连接字符串(例如数组1的第1项,数组2的第1项,数组3的第1项-然后继续创建下一个字符串,数组1的第2项,数组2的第2项,数组3的第2项,等等)

任何输入将是感激的。谢谢你!

循环遍历多个数组以连接

正如第一个评论者所说(呸),不要像那样在SQL中使用字符串连接。您将需要设置SQL命令,然后传入参数。

然而,这是旁边的点,因为你正在询问滚动数据从多个数组到一个字符串。

遍历其中一个数组,如果它们都具有相同的计数,则可以将数据整齐地放在一个数组中。

for(int i = 0; i < array1.Length; i++)
{
    results.Add(string.format("Hello you! {0} , {1}, {2}", array1[i], array2[i], datearray[i])
}

这将得到您想要的结果,但您的代码是开放的漏洞,因为它的立场。你需要改变你的方法。

因为你的循环是嵌套的,你会得到array2的每个值与array1中的每个值相结合(datearray1也是如此)。这就是你得到太多结果的原因。

您的循环将像这样工作(我使用了类似的局部变量来避免重复输入results.Add行,并明确代码与您的代码有什么不同):

for (int i = 0; i < array1.Length; i++)
{
    string line = array1[i];
    string lines = array2[i];
    DateTime date = datearray1[i];
    results.Add("select * from table1 d, table2 c where d.specheader = c.specheader and c.true_false = true and d.number = " + lines.ToString() + " and d.date = '" + date.ToShortDateString() + "' and d.specnum like '%" + line.ToString() + "';");                        
}

作为旁注:以这种方式构建数据库查询是低效且非常不安全的(尝试阅读"Sql注入"以了解原因)。如果使用存储过程,效果会更好。

如果所有条目的数量相同你可以简单地执行for循环

                for (int 1 = 0; i < datearray1.length; i++)
                {
                    results.Add("select * from table1 d, table2 c 
                                 where d.specheader = c.specheader and c.true_false = true
                                 and d.number = " + array2[i].ToString() + " 
                                 and d.date = '" + datearray1[i].ToShortDateString() + "'
                                 and d.specnum like '%" + array1[i].ToString() + "';");                        
                }