6

エンティティSQLクエリがあります:

SELECT VALUE t FROM MyEntities AS t 
WHERE t.Name = @p OR (@p IS NULL AND t.Name IS NULL)

次のようにクエリを実行できます。

var results = context.CreateQuery<WorkflowInstance>(
    query, new ObjectParameter("p", name)).ToList();

ただし、「name」変数がnullの場合、System.ArgumentNullExceptionが発生します。そのため、名前がnullの場合もDBNull.Valueを使用しようとしましたが、次の例外が発生します。

System.ArgumentOutOfRangeExceptionがキャッチされました
Message=指定されたパラメータータイプ'System.DBNull'は無効です。System.Int32、System.Decimal、System.DateTime、System.Guidなどのスカラー型のみがサポートされています。

null値も可能なパラメータ値であるパラメータ化されたクエリが欲しいです。エンティティSQLでこれを実現するにはどうすればよいですか?

4

2 に答える 2

12

そうです、ObjectParameterコンストラクターのバグのようです。しかし、Valueプロパティはnull値を受け入れるようです。コードを次のように置き換えてみてください。

var prm = new ObjectParameter("p", typeof(string));
prm.Value = name;

var results = context.CreateQuery<WorkflowInstance>(
    query, prm).ToList();

Valueパラメータを直接割り当てると、コードは機能しているように見えます。

ダビデ

于 2011-01-27T11:09:05.523 に答える
1

Davideの投稿です。この修正を使用して、整数値を渡しました。

var prm = new ObjectParameter("pName", typeof(int));
prm.Value = pmId;
于 2012-02-02T16:03:47.737 に答える