如何从C#查询中删除最后一个逗号

11

我正在做如下事情...

querybuilder = ("SELECT Type, Text FROM [Element] WHERE Id IN( ");
foreach (var item in CaseIdList)
{
   querybuilder += item + ",";
}
querybuilder += ")";
在最后一个闭括号里面我得到了一个逗号。如何去掉它。

@Serge,也许他正在使用较旧版本的.NET? - james31rock
11个回答

25

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

在 foreach 循环后使用:

querbuilder = querybuilder.TrimEnd(',');

你可以使用StringBuilder类来代替字符串连接。


3
或者你可以简单地这样做:querybuilder = querybuilder + (String.Join(",", CaseIdList)) + ")"; - Habib

6
首先,我会尽量避免直接包含值本身。在可能的情况下使用参数 - 对于"IN(x, y, z)"样式的参数不太简单,但你可以使用"表值参数"或者简单地动态创建参数列表(例如"IN(@p0, @p1, @p2)")。
其次,在循环中避免使用字符串拼接 - 如果你真的必须循环,请使用"StringBuilder"。
第三,使用"string.Join"来避免完全循环:
string commaSeparated = string.Join(", ", values);

5

您可以使用string.Join方法代替foreach循环。请参阅此文档


2
你可以使用 String.Join(",", item);。这意味着你不需要进行繁琐的修剪或拆分。

1
我会使用 String.Join:
querybuilder = "SELECT Type, Text FROM [Element] WHERE Id IN( " + String.Join(",", CaseIdList.ToArray()) + ")";

我也会考虑使用参数而不是使用强连接构建SQL - 字符串连接容易受到SQL注入攻击,而参数的使用非常简单。
如何切换到参数取决于您如何访问数据库以及使用哪种数据库引擎,但快速的谷歌搜索应该可以帮助解决问题。

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

0

尝试使用String.Trim

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

querybuilder = querybuilder.Trim(',');

0

尝试使用Replace()函数:

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

   Console.WriteLine(temp);
   Console.ReadKey();
}

0
你可以使用LINQ聚合和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);

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接