2013-04-24 33 views
0

我可以生成的SQL语句:NHibernate的 - 表值函数

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

但这给出了错误:

Specified method is not supported.

回答

1

我好不容易才与以下内容:

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

这是一个黑客的技巧,但它的工作原理,所以我想它现在会做。