【C#】ASP.netのTips

最終更新日:2018‐11-22

コードを書いてて、たまに「あれ?どうやるんだっけ」となるコードの備忘録です。

ListからIN句で使えるSQLを生成する

IN文句に対してプレースホルダが使えるようなORMを使っている場合はいいのですが、たいていの場合、うまく動いたためしがないので、文字列結合してくっつけます。Linqのメソッド構文でサクッと書けます。

// IN句で使えるようにシングルクォーテーション+カンマつなぎにする
var condition = string.Join(",", piyoIdList.Select(x => string.Format("'{0}'", x)));

// SQLを実行(テンプレートリテラルで条件値を設定)
var sql = $"SELECT * FROM T_HOGE WHERE piyoId IN ({condition});";

ただし、仕様上、IN句内のデータが大量になることが想定される場合はパフォーマンスの観点からお勧めできません。使用するDBによってはIN句内の設定値件数オーバーでエラーとなります。そのような場合は、素直にtempテーブルを作ってINNER JOINするか、Listを分割して複数回クエリを発行し、後でフェッチした値をAddRangeするなどの方法が考えられますが、前者の方がパフォーマンスが良いと思われます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です