1

我可以生成以下 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(???))

如何使用新的 SQL 来调整上面的 HQL 生成器?我会很感激帮助。谢谢

更新:

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

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")
            )
        )
    )
);

但这给出了错误:

不支持指定的方法。

4

1 回答 1

3

我设法想出了以下几点:

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

这有点像黑客,但它可以工作,所以我想它现在就可以了。

于 2013-04-25T08:22:00.337 回答