Nhibernate -表值函数

本文关键字:函数 Nhibernate | 更新日期: 2023-09-27 18:10:46

我可以生成以下SQL:

[dbo]。[CategoryMatch]([CategoryId], ??) = 1

使用以下HQL生成器:

treeBuilder.Equality(treeBuilder.MethodCall("[dbo].[CategoryMatch]", new[] {
    visitor.Visit(arguments[0]).AsExpression(),
    visitor.Visit(arguments[1]).AsExpression()
}), treeBuilder.Constant(1));

然而,我发现这并不像说的那样好:

[CategoryId] IN (SELECT [Id] FROM [dbo].GetCategories(??))

我怎么能适应我的HQL生成器上面与新的SQL?我很感激你的帮助。由于

更新:

到目前为止,我已经想到了以下内容:

treeBuilder.In(
    visitor.Visit(arguments[0]).AsExpression(),
    treeBuilder.SelectFrom(
        treeBuilder.From(
            treeBuilder.Range(
                treeBuilder.MethodCall("[dbo].[GetCategories]", new[] {
                    visitor.Visit(arguments[1]).AsExpression()
                }).AsExpression(),
                treeBuilder.Alias("c")
            )
        )
    )
);

但是这给出了错误:

指定的方法不支持

Nhibernate -表值函数

我已经设法想出了以下内容:

treeBuilder.In(
    visitor.Visit(arguments[0]).AsExpression(),
    treeBuilder.MethodCall("SELECT [Id] FROM [dbo].[GetCategories]", new[] {
        visitor.Visit(arguments[1]).AsExpression()
    }).AsExpression()
)

这是一个hack,但它工作,所以我想它现在就可以了。