循环遍历多个数组以进行连接

时间:2014-06-11 15:46:35

标签: c#

我有3个阵列。两个是字符串数组,一个是日期/时间。我从用户输入中提取了所有3个。每个数组总是具有相同数量的条目,所以我想要做的是能够一次遍历所有3个字符串。

我在尝试:

        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次。有没有办法同时使用所有3个数组连接一个字符串(所以像数组1的第1项,数组2的第1项,数组3的第1项 - 然后继续创建下一个字符串,数组的第2项1,数组2的第2项,数组3的第2项等)

任何输入都将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

由于您的循环是嵌套的,因此您将array2的每个值与array1中的每个值相结合(与datearray1类似。这就是为什么您得到太多结果。< / p>

你的循环会像这样按预期工作(我使用类似的局部变量来避免重新输入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 Injection”以了解原因)。如果您使用存储过程,则会看到更好的结果。

答案 1 :(得分:1)

正如第一位评论者所说的那样(Yuck)不要像这样使用字符串串联。您将需要设置SQL命令,然后传入参数。

然而,当您要求将来自多个数组的数据汇总到1个字符串时,这就不合时宜了。

遍历其中一个数组,如果它们都具有相同的计数,您将整齐地将数据合并到一个数组中。

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

这将获得您想要的结果,但您的代码可以随时查看漏洞。你需要改变你的方法。

答案 2 :(得分:0)

如果所有条目的数量都相同,你可以简单地做一个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() + "';");                        
                }