2011-06-17 20 views
0

私は作業基準を持っていますが、私の方法をより柔軟にしたいのです。NHIbernate ICriteria条件付き分離

私の基準の作品の一つは次のようになります。

.Add(
     nhc.Restrictions.In("GroupID", groupIDs) 
     || nhc.Restrictions.Eq("UserIDScheduled", userID)); 

が、私は何をする必要があることはそうでない場合は、私が買ってあげるためgroupIDsが&ユーザーID paramsは、実際に、ここでそれらを追加する前に値を持っているかどうかを確認で予期しない結果/クエリ。たとえば、GroupIDがx、y、zにあるエンティティを取得したいが、nullの場合はORにuseridを含めない。

私はこれを行う3ケースのIFステートメントを持つことができますが、それをインラインで実行する別の方法があるようです。 (groupIDs == nullの場合は.Add(.. In(GroupID)..)の場合)。

私は明らかにICriteria APIに詳しくないので、私はそうではありませんそれが何であるかを確かめてください。

答えて

1

あなたがそうのような論理和使用することができます。

var disjunction = new Disjunction(); 

if (userId != null) 
    disjunction.Add(Restrictions.Eq("UserIDScheduled", userID)); 
if (groupIDs != null) 
    disjunction.Add(Restrictions.In("GroupID", groupIDs)); 

criteria.Add(disjunction); 
+0

おかげで - 私はメソッドチェーンの後ろの種類があったとは思いませんでした理由はわからない:-xを – JoeBrockhaus