11

我正在做如下的事情..

querybuilder = ("SELECT Type, Text FROM [Element] WHERE Id IN( ");
foreach (var item in CaseIdList)
{
   querybuilder += item + ",";
}
querybuilder += ")";

在最后一个 insdie 右括号我得到一个逗号。如何删除它。

4

11 回答 11

24

用于TrimEnd(',');从字符串中删除最后一个逗号,string.TrimEnd

在 foreach 循环后使用:

querbuilder = querybuilder.TrimEnd(',');

您可以使用StringBuilder类,而不是连接字符串。

于 2012-08-02T05:51:52.607 回答
6

首先,我会尽量避免直接包含这些值本身。尽可能使用参数 - 样式参数不太简单IN(x, y, z),但您可以使用表值参数或简单地动态创建参数列表(例如 to IN(@p0, @p1, @p2)

其次,我会避免在循环中使用字符串连接 -StringBuilder如果你真的必须循环使用。

第三,我会string.Join用来避免循环:

string commaSeparated = string.Join(", ", values);
于 2012-08-02T06:01:26.733 回答
5

您可以使用 string.Join 方法代替 foreach 循环。看看这个

于 2012-08-02T05:57:26.910 回答
2

您可以使用String.Join(",", item); 这意味着您无需进行难看的修剪或拆分。

于 2012-08-02T06:00:50.973 回答
1

我会使用 String.Join:

querybuilder = "SELECT Type, Text FROM [Element] WHERE Id IN( " + String.Join(",", CaseIdList.ToArray()) + ")";

我还会考虑使用参数而不是使用强连接构造 SQL - 字符串连接容易受到 SQL 注入攻击,并且参数易于使用。

您将如何切换到参数取决于您访问数据库的方式以及使用哪个数据库引擎,但快速的 google 搜索应该会有所帮助。

于 2012-08-02T05:59:52.033 回答
0
querybuilder = ("SELECT Type, Text FROM [Element] WHERE Id IN( ");
foreach (var item in CaseIdList)
{
   querybuilder += item + ",";
}
querbuilder = querybuilder.TrimEnd(',');
querybuilder += ")";
于 2012-08-02T05:53:51.520 回答
0

尝试使用String.Trim

从当前 String 对象中删除所有前导和尾随空白字符。

querybuilder = querybuilder.Trim(',');
于 2012-08-02T05:54:13.510 回答
0

尝试使用Replace()

static void Main()
{
   string temp = "(a, b, c, d,)";
   temp = temp.Replace(",)", ")");

   Console.WriteLine(temp);
   Console.ReadKey();
}
于 2012-08-02T05:58:25.687 回答
0

您可以使用 LINQ Aggregate 和 string.Format 方法:

    var items = CaseIdList.Select(p=>p.ToString(CultureInfo.InvariantCulture)).Aggregate((i,j)=>i+", "+j)
    querybuilder = string.Format("SELECT Type, Text FROM [Element] WHERE Id IN ({0})", items);
于 2012-08-02T06:02:34.550 回答
0

使用示例StringBuilder

            var querybuilder  = new StringBuilder("SELECT Type, Text FROM [Element] WHERE Id IN(");
            foreach (var fragment in fragments)
            {
                querybuilder.Append(fragment);
                querybuilder.Append(',');
            }

            // note: we need to delete last line terminator
            querybuilder.Remove(querybuilder.Length - 1, 1);
            querybuilder.Append(')');
            return querybuilder.ToString();
于 2012-08-02T06:06:23.193 回答
0

首先,如果你连接字符串的次数太多,你就会失去性能,因为每次你对字符串 var 执行任何操作时,它都会在内存中重新分配/分配整个字符串。在这种情况下,您应该使用 StringBuilder。

StringBuilder querybuilder = New StringBuilder();
querybuilder.Append("SELECT Type, Text FROM [Element] WHERE Id IN( "));
foreach (var item in CaseIdList) 
{    
    //querybuilder += item + ","; 
    querybuilder.Append(item);
    querybuilder.Append(",");
} 
//querybuilder += ")";
querybuilder.Remove(querybuilder.ToString().Length-1,1);
querybuilder.Append(")");
于 2012-08-02T06:28:26.503 回答