【问题标题】:Criterion based on boolean TSQL function基于布尔 TSQL 函数的标准
【发布时间】:2016-02-01 01:39:07
【问题描述】:

我正在调用 sql server 函数包含这样的内容:

ftquery = _OrElse(ftquery,Restrictions.Eq(Projections.SqlFunction("contains",NHibernateUtil.Boolean, Projections.Property<Document>(d => d.SearchContent), Projections.Constant(query.Query)),true));

OrElse 将使用 Restrictions.Or(ICriterion, ICriterion) 执行 or。问题是它会生成无效的 sql:

... and contains(this_.SearchContent, ?) = ? ORDER BY ...

我不想拥有正确的部分 (= ? ),我只需要没有 Restrictions.Eq 的 Projection,但没有 Restrictions.Eq 我找不到任何将 Projection 转换为 Criterion 的解决方案。

我们如何使用 NHibernate 生成类似的 sql:

Select Name from Users where Contains(Name,'toto') or Contains(Job,'tata')

【问题讨论】:

    标签: nhibernate queryover


    【解决方案1】:

    用您的方言注册函数:

    RegisterFunction("FullTextContains", new StandardSQLFunction("contains", NHibernateUtil.Boolean));
    

    使用Projections.SqlFunction 创建一个投影,然后在您的查询中使用这个ProjectionAsCriterion 类:

    var projection = Projections.SqlFunction("FullTextContains", 
        NHibernateUtil.Boolean, 
        Projections.Property<Document>(x => x.SearchContent),
        Projections.Constant(query.Query));
    
    var result = Session.QueryOver<Document>()
        .Where(new ProjectionAsCriterion(projection))
        .List();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多