我可以生成以下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")
)
)
)
);
但这会产生错误:
不支持指定的方法。
答案 0 :(得分:1)
我设法提出以下内容:
treeBuilder.In(
visitor.Visit(arguments[0]).AsExpression(),
treeBuilder.MethodCall("SELECT [Id] FROM [dbo].[GetCategories]", new[] {
visitor.Visit(arguments[1]).AsExpression()
}).AsExpression()
)
这是一个黑客攻击,但它确实有效,所以我想它现在会做。