c# - 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。
提前致谢
解决方案
它比我想象的要简单,使用以这种方式解决的构建器
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)); }
推荐阅读
- html - 具有最大宽度和设置高度的图像
- c++ - 类似的代码。一个工作,一个崩溃。为什么?
- reactjs - React 版本 16 中的组件
- javascript - 两个可观察量之间的差异
- c# - 如何使用 HtmlAgilityPack 访问此表的 tr?
- python - 在python中运行多个函数
- firebase - For-Loop 中的 Firebase (....ContinueWith(task => ...)
- discord.py - 制作命令,以便只有某些服务器可以执行
- fortran - Fortran SELECT TYPE 中的相同代码块
- gsutil - gsutil + rsync 删除同步文件?(没有 --remove-source-files 标志?)