Это может быть что-то очевидное, но я несколько часов бился об это и не могу понять, где я иду не так.
Я пытаюсь запустить небольшой фрагмент кода, чтобы проверить добавление критериев ИЛИ к запросу NHibernate. Вот код, который у меня есть:
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. Что, что неудивительно, ничего не возвращает.
Отображение настроено правильно (я могу добавлять / редактировать / удалять / перечислять все объекты), и там есть объекты с этими идентификаторами.
Я что-то делаю явно неправильно? Любые примеры использования Disjunction, которые я видел в Интернете, похоже, используют его таким образом. Я просто не понимаю, почему он продолжает использовать AND.
Спасибо.