Nhibernate - 表值函数

时间:2013-04-24 13:55:18

标签: c# linq nhibernate linq-to-nhibernate

我可以生成以下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")
            )
        )
    )
);

但这会产生错误:

  

不支持指定的方法。

1 个答案:

答案 0 :(得分:1)

我设法提出以下内容:

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

这是一个黑客攻击,但它确实有效,所以我想它现在会做。