Dapperのリストパラメータのnullをチェックする

dapper parameters

質問

パラメータの型がIEnumerableのときにnullをチェックする方法はありますか?私はDapperがパラメータをパラメータ化されたクエリに変換することを知っているので、リストパラメータがnullをチェックできない理由が疑わしいですが、その動作を実現する方法があるかどうか疑問に思っていました。

アイデアは次のようなことをすることです:

select * from Table1 where (@ids IS NULL OR id in @ids)

今すぐクエリはSqlExceptionをメッセージとともにスローします。スカラー変数 "@ids"を宣言しなければなりません。 ')'の近くの構文が正しくありません。

受け入れられた回答

id in @idsid in @idsは、dapperによって認識され、 拡張として扱われるパターンです。つまり、入力ids項目数に応じて、次のいずれかになる可能性があります。

(1 = 0) -- empty sequence
(id = @ids_0) -- sequence with 1 element
(id in (@ids_0, @ids_1, ...)) -- sequence with multiple elements

このため、拡張後に、何もありません @idsパラメータ/変数は-よう@ids IS NULL仕事に行くのではありません。このように、私はあなたのケースでこれを行うための最善の方法を提案しています。単にtsqlのその部分を追加しないでください 。例えば:

var sql = new StringBuilder("select * from Table1");
if(ids != null && ids.Any())
{
    sql.Append(" where id in @ids");
}
var data = conn.Query<SomeType>(sb.ToString(), new { ids }).ToList();


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ