2011-10-21 14 views
0

MultiQueryのクエリでパラメータを設定する方法は? "指定されたパラメータコードが複数のクエリで使用されました。"私は、複数の問合せ内のクエリのためのパラメータを設定しようとしています

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を使用を使用することができます例が意図したとおりに動作するように名前付きパラメータを設定する()メソッド

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

答えて

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); 
} 
+0

は、これは私が考えていたものですが、私は、エラーを解決するためのその他の推奨ソリューションについての骨董た:「またはにマルチクエリsetParameterを()メソッドを使用します指定されたパラメータを設定します。 " –

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/%' ...) 
+0

ええ、クエリは部分的に冗長ですが、必要に応じて結果をグループ化してくれました。結局私は代わりに単一のクエリを使用し、結果からグループ化された結果を得る必要がありました。 –

関連する問題