私は次のように何かをやっています..
querybuilder = ("SELECT Type, Text FROM [Element] WHERE Id IN( ");
foreach (var item in CaseIdList)
{
querybuilder += item + ",";
}
querybuilder += ")";
最後の insdie 閉じ括弧で、コンマを取得しています。それを取り除く方法。
TrimEnd(',');
文字列から最後のコンマを削除するために使用します。string.TrimEnd
foreach ループの後に次を使用します。
querbuilder = querybuilder.TrimEnd(',');
文字列を連結する代わりに、StringBuilderクラスを使用できます。
まず、値自体を直接含めないようにします。IN(x, y, z)
可能な場合はパラメーターを使用します。スタイル パラメーターの場合はそれほど単純ではありませんが、テーブル値パラメーターを使用するか、単純にパラメーター リストを動的に作成することができます (例: to IN(@p0, @p1, @p2)
) 。
第二に、ループで文字列連結を使用することは避けたいと思いStringBuilder
ます。本当にループする必要がある場合に使用してください。
第三に、string.Join
ループする必要をまったく回避するために使用します。
string commaSeparated = string.Join(", ", values);
foreach ループの代わりに、string.Join メソッドを使用できます。これを見てください
String.Join(",", item);
これは、醜いトリミングや分割を行う必要がないことを意味します。
String.Join を使用します。
querybuilder = "SELECT Type, Text FROM [Element] WHERE Id IN( " + String.Join(",", CaseIdList.ToArray()) + ")";
また、強力な連結を使用して SQL を構築する代わりにパラメーターを使用することも検討します。文字列連結は SQL インジェクション攻撃に対して脆弱であり、パラメーターは使いやすいです。
パラメータに切り替える方法は、データベースへのアクセス方法とデータベース エンジンによって異なりますが、簡単な Google 検索が役立ちます。
使用例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();
使用してみてくださいReplace()
:
static void Main()
{
string temp = "(a, b, c, d,)";
temp = temp.Replace(",)", ")");
Console.WriteLine(temp);
Console.ReadKey();
}
querybuilder = ("SELECT Type, Text FROM [Element] WHERE Id IN( ");
foreach (var item in CaseIdList)
{
querybuilder += item + ",";
}
querbuilder = querybuilder.TrimEnd(',');
querybuilder += ")";
使ってみてくださいString.Trim
:
現在の String オブジェクトから先頭と末尾の空白文字をすべて削除します。
querybuilder = querybuilder.Trim(',');
まず第一に、文字列を何度も連結すると、文字列 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(")");
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);