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

foreach ループの代わりに、string.Join メソッドを使用できます。これを見てください

于 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

使用例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

使用してみてください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
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

まず第一に、文字列を何度も連結すると、文字列 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 に答える
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 に答える