nhibernate,带有sql

时间:2015-08-13 19:01:31

标签: c# sql nhibernate

是否可以在基于数据库外部计算的nHibernate (版本3.3)中添加限制?例如,假设下面的someCalculation在我的代码中调用了一些其他方法并返回一个布尔值。为了论证,不能在数据库中创建someCalculation()。有没有办法让它发挥作用?它目前正在投掷,我不确定是不是因为我离开了,或者我做错了什么。

 query.UnderlyingCriteria.Add(Restrictions.Where<MyEntity>(x => someCalculation(x.id)); 

1 个答案:

答案 0 :(得分:2)

答案不仅仅是与SQL相关的NHibernate。简单地说,我们将在执行之前预先发送该计算的结果 - 或者我们将在DB端实现这样的功能。没有其他两种混合物是可能的。

第一个会以这样的声明结束

var allowedIds = someCalculation(); // someCalculation(x.id)
query.WhereRestrictionOn(c => c.id).IsIn(allowedIds.ToArray());

如果该id必须是计算的一部分,我们可以先加载某种过滤后的ID,进行计算,然后执行第二次选择 - 类似于上面的

var ids = session.QueryOver<MyEntity>()
    .Select(c => c.id)
    .List<int>();

var allowedIds = someCalculation(ids); // someCalculation(x.id)

如果仍然无效,唯一的方法是在DB端创建一个Function并调用它。有详细的Q&amp;答:

Using SQL CONVERT function through nHibernate Criterion