如何从循环中删除额外的AND

时间:2013-01-27 05:52:49

标签: c# .net string

foreach (string word in allTheseWords)
{
allTheseStringsWhereClause = allTheseStringsWhereClause + 
                             " report=" + 
                             word + 
                             " AND ";
}

问题出在循环之后,SQL子句的末尾有一个额外的AND

我该如何解决这个问题?

7 个答案:

答案 0 :(得分:13)

您也可以使用LINQ

string _final = string.Join(" AND ", (allTheseWords.Select(x => "report=" + x)));

答案 1 :(得分:4)

通过将用户输入插入到sql where子句中,您将为 SQL注入攻击引入向量。不要使用这种方法。基本上你想使用SQL参数。

where report in @allTheseWords

请参阅http://en.wikipedia.org/wiki/SQL_injection

修改

查看Parameterize an SQL IN clause中投票最多的答案,了解如何在查询中进行参数化。

答案 2 :(得分:2)

这类问题很常见,这就是证据。

  1. Delete last char of string
  2. How to delete last character in a string in C#?
  3. Finding the last index of an array
  4. 但这是我的简单解决方案

            string[] allTheseWords = { "try", "test", "let" };
            string whereLine = string.Empty;
            foreach (var item in allTheseWords)
                    whereLine += "report = " + item.ToString() + " and ";
            string final = whereLine.Remove(whereLine.Length - 5);
            Console.WriteLine(final);
            Console.ReadLine();
    

答案 3 :(得分:1)

一种简单的方法是添加一个伪的always-true子句(并移动AND):

string allTheseStringsWhereClause = "WHERE 1=1";
foreach (string word in allTheseWords)
{
allTheseStringsWhereClause = allTheseStringsWhereClause + 
                             " AND report=" + 
                             word;
}

答案 4 :(得分:0)

您不需要LINQ,只需使用Join

string whereClause = " report=" + String.Join(" AND report=", allTheseWords);

答案 5 :(得分:-1)

在不对子字符串方法进行硬编码的情况下执行此操作的最佳方法是尝试聚合LINQ查询

var result = allTheseWords.Aggregate(allTheseStringsWhereClause, (current, word) => current + " report=" + word + " AND ");

答案 6 :(得分:-3)

易。你只需要做allTheseStringsWhereClause.substr(0,-4)就可以了!