これは明らかなことかもしれませんが、私は数時間前から頭を打っていて、どこが間違っているのか分かりません。ORの代わりにANDクエリを返すNHibernateの分離
NHibernateクエリにOR条件を追加するテストを行うために、小さなコードを実行しようとしています。これは私が持っているコードです
using (ISession session = NHibernateHelper.OpenSession())
{
ICriteria criteria = session.CreateCriteria<TestObject>();
int[] ids = {1, 2, 3};
foreach (int id in ids)
{
ICriterion criterion = Restrictions.Eq("Id", id);
criteria.Add(Restrictions.Disjunction().Add(criterion));
}
IList<TestObject> items = criteria.List<TestObject>();
return items;
}
これは、私がIDが1から3のすべてのテストオブジェクトを返すことが期待される単純なものです。しかし、コードを実行すると、生成されたクエリはID = 1およびID = 2およびID = 3のオブジェクトを見つけることになります。これは意外にも何も返されません。
マッピングが正しく設定されています(すべてのオブジェクトを追加/編集/削除/一覧表示できます)。これらのIDを持つオブジェクトがあります。
明らかに間違っているのですか?私が見たディスジャンクションを使用したサンプルは、すべてこのように使用されています。私はちょうどそれがANDを使用し続ける理由を得ない。
ありがとうございました。
マジック、御馳走を働きました。あなたのコードを見ると理にかなっています - 個々のORを一緒に "and-ing"することは決して考えませんでした。 コードの唯一のマイナーチェンジは、次のように論理和を作成することです。 ジャンクションdisjunction = Restrictions.Disjunction(); (ICriterionには「追加」はありません)。 ありがとう! –