0

MultiQuery 内で Query のパラメーターを設定しようとしています:

var multiQuery = SessionHolder.Current.CreateMultiQuery();

foreach (string name in names)
{
    var query = SessionHolder.Current
        .CreateQuery("select c.Name, c.Surname " +
                     "from Person as p " +
                     "where p.Name = :name or " +
                           "p.Name like ':name/%'")
        .SetParameter("name", name);

    multiQuery = multiQuery.Add(query);
}

var multiQueryResult = multiQuery.List();

そしてこの例外を取得します:

QueryException was unhandled by user code

The named parameter code was used in more than one query. Either give unique names to your parameters, or use the multi query SetParameter() methods to set the named parameter

マルチクエリ SetParameter() メソッドを使用して名前付きパラメーターを設定し、例が意図したとおりに機能するようにするにはどうすればよいですか?

返信ありがとうございます。

4

2 に答える 2

2

あまりきれいではないかもしれませんが、パラメーターに一意の ID を使用することを考えましたか?

int i = 0;
foreach (string name in names)
{
    string paramname = "name" + (++i).ToString();
    var query = SessionHolder.Current
        .CreateQuery("select c.Name, c.Surname " +
                     "from Person as p " +
                     "where p.Name = :" + paramname + " or " +
                           "p.Name like ':" + paramname + "/%'")
        .SetParameter(paramname, name);
    multiQuery = multiQuery.Add(query);
}
于 2011-10-21T12:31:48.390 に答える
2

マルチクエリが実際に何をしているのかを考慮する必要があります。

舞台裏では、次のようなデータベースへの単一のクエリで終了します。

select p.Name, p.Surname from Person as p where p.Name = :name or p.Name like ':name/%'
select p.Name, p.Surname from Person as p where p.Name = :name or p.Name like ':name/%'
select p.Name, p.Surname from Person as p where p.Name = :name or p.Name like ':name/%'
select p.Name, p.Surname from Person as p where p.Name = :name or p.Name like ':name/%'
select p.Name, p.Surname from Person as p where p.Name = :name or p.Name like ':name/%'
...

あまり意味がないので、クエリの各部分で同じ基準を使用することはおそらく望ましくありません。これがやりたい場合は、一意の名前を使用する必要があります。

ただし、クエリを見ると、とにかく複数の条件を持つ単一のクエリに書き直したいと思うでしょう。

おそらく、次のような基準を持つもの:

p.Name in (:names) or (p.Name like ':name1/%' or p.Name like ':name2/%' ...)
于 2011-10-21T13:09:59.897 に答える