gpt4 book ai didi

nhibernate - 数据类型的 HQL 表达式等价物

转载 作者:行者123 更新时间:2023-12-04 00:36:30 25 4
gpt4 key购买 nike

背景:我需要为 linqtohiberante 创建一个自定义扩展方法来执行以下操作,

 result.Where(p => p.MyIntColumn.IsLike('%100%') );

这样就可以输出一个自定义的 sql,如下所示。

select * from orders where  CONVERT(VARCHAR, MyIntColumn) LIKE '%100%'

我正在尝试通过扩展 BaseHqlGeneratorForMethod 来构建自定义表达式,如下所示。

    public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
{
return treeBuilder.Like(treeBuilder.MethodCall("convert",
new[] { "stuck here", visitor.Visit(arguments[0]).AsExpression() }),
visitor.Visit(arguments[1]).AsExpression());
}

我需要能够将 VARCHAR 作为表达式注入(inject)到 MethodCall 表达式的参数列表中。请参阅上面代码片段中的文本“stuck here”。知道我该怎么做。

提前致谢

大黄蜂

最佳答案

没试过,但我认为你必须调用 treeBuilder.Cast 而不是 treeBuilder.MethodCall

public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, 
HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
{
return treeBuilder.Like(
treeBuilder.Cast(visitor.Visit(arguments[0]).AsExpression(), typeof(string)),
visitor.Visit(arguments[1]).AsExpression());
}

关于nhibernate - 数据类型的 HQL 表达式等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com