首页 > 解决方案 > NHibernate LinqToHqlGenerator for Oracle 全文索引“包含”关键字

问题描述

我在 Nhibernate 中使用了两个不同的数据库,对于 Sql Server 我解决了阅读这篇文章

它适用于 Sql Server,但 Oracle 有不同的语法:

Contains("a", "b")>0

我不知道如何在这段代码中做到这一点

    public override HqlTreeNode BuildHql(MethodInfo method,
      System.Linq.Expressions.Expression targetObject,
      ReadOnlyCollection<System.Linq.Expressions.Expression> arguments,
      HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
    {

        HqlExpression[] args = new HqlExpression[2] {
            visitor.Visit(arguments[0]).AsExpression(),
            visitor.Visit(arguments[1]).AsExpression()
        };


        return treeBuilder.BooleanMethodCall("contains", args);
    }

问题是我不明白如何在表达式后添加 >0。

提前致谢

标签: c#linqnhibernate

解决方案


它比我想象的要简单,使用以这种方式解决的构建器

public override HqlTreeNode BuildHql(MethodInfo method,
          System.Linq.Expressions.Expression targetObject,
          ReadOnlyCollection<System.Linq.Expressions.Expression> arguments,
          HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)        {           HqlExpression[] args = new HqlExpression[2] {
                visitor.Visit(arguments[0]).AsExpression(),
                visitor.Visit(arguments[1]).AsExpression()          };

            return treeBuilder.GreaterThan(treeBuilder.MethodCall("contains", args), treeBuilder.Constant(0));      }

推荐阅读