这可能是显而易见的,但我一直对我的头撞了几个小时,不知道我要去哪里错了。NHibernate分离导致AND查询,而不是OR
我想运行一小段代码来测试向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;
}
这只是简单的东西,我会希望返回与标识1-3的所有测试对象。但是,当我运行代码时,生成的查询是查找ID = 1 AND ID = 2 AND ID = 3的对象。毫不奇怪,这不会返回任何内容。
映射的设置正确(我可以添加/编辑/删除/列出所有对象),并且存在具有这些ID的对象。
我在做什么明显错误?任何使用Disjunction的例子都在网上看过,似乎都是这样用的。我只是不明白为什么它继续使用AND。
谢谢。
魔术,得到成功的治疗。当我看着你的代码时是有意义的 - 我从来没有想过它会将单个OR“联系在一起”。 对代码的唯一小改动是创建析取如下: Junction disjunction = Restrictions.Disjunction(); (ICriterion没有'添加')。 谢谢! – 2009-08-26 18:40:49