嗨,我是 NHibernate 的新手,我有点困惑。
假设我们有一个产品表。让产品表有 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()
或更恰当的方式(使用 lambda 扩展):
session.CreateCriteria(typeof(product))
.Add<product>(p => p.price1 == (p.price2 + 100))
.List()
事实上,我从 googlecode 下载了 lambda 扩展项目,并将其扩展为递归处理二进制和一元表达式以实现如下表达式:
session.CreateCriteria(typeof(product))
.Add<product>(p =>
(!(p.price1 > 29007) && (p.price1 > 19009))
|| (p.price2 == 29009));
我目前正在处理像上面这样的查询,但是算术子句让我很烦,因为我无法返回适当的限制来获得我需要的标准。
mpffh 我厌倦了试图以全面的方式解释它。我希望它有效。任何帮助表示赞赏。