Привет, я новичок в NHibernate и немного растерялся.
Предположим, у нас есть таблица product .
Пусть в таблице product есть 2 столбца price1 и price2.
тогда я могу запросить сопоставленные сущности продукта через HQL следующим образом:
string queryString = @"from product p
where p.price1 = p.price2 + 100 ";
IList result = session.CreateQuery(queryString).List();
Как мне добиться этого с помощью ICriteria API.
Я знаю, что это абсурдно, но я пытаюсь вот так:
session.CreateCriteria(typeof(product))
.Add(Expression.Eq("price1", "price2" + 100))
.List()
или более подходящим образом (с использованием лямбда-расширений):
session.CreateCriteria(typeof(product))
.Add<product>(p => p.price1 == (p.price2 + 100))
.List()
Фактически я скачал проект расширений лямбда-кодов из googlecode и расширил его, чтобы рекурсивно обрабатывать двоичные и унарные выражения для реализации таких выражений, как:
session.CreateCriteria(typeof(product))
.Add<product>(p =>
(!(p.price1 > 29007) && (p.price1 > 19009))
|| (p.price2 == 29009));
В настоящее время я обрабатываю запросы, как описано выше, но арифметические предложения меня раздражают, поскольку я не могу вернуть соответствующее ограничение для получения необходимого критерия.
mpffh Я устал пытаться объяснить это всесторонне. Я надеюсь, что это сработало. Любая помощь приветствуется.