TESTID IN (...)
SQL クエリ部分で動的な数の値を渡すことができる唯一の方法は、副選択を使用することです。これは SQL クエリ自体に適用されるため、問題を解決するパラメーターの型はありません。
別の方法として、文字列の連結と各引数の慎重な検証を使用して、クエリを動的に作成することもできます。
ID を使用しているため、ID はおそらく整数です。
List<int> testId = ...;
var sb = new StringBuilder();
sb.Append("DELETE FROM TEST WHERE TESTID IN (");
bool first = true;
foreach (var i in testId)
{
if (first)
first = false;
else
sb.Append(",");
sb.Append(i.ToString(CultureInfo.InvariantCulture));
}
sb.Append(")");
Context.Database.ExecuteSqlCommand(sb.ToString());
クエリに追加される文字列引数がないため、SQL インジェクションから安全です。整数に悪意のある SQL コードが含まれることはありません。
ID の数が非常に多い (長すぎるためにコンパイル中にクエリが失敗する) 場合の通常のアプローチは、一時テーブルを作成し、そこに ID を挿入することです。
もう 1 つの方法は、XML としてフォーマットされた値を渡し、SQL クエリで XML 文字列から値を取得するサブセレクトを記述することです。