C# Nhibernate-表值函数
我可以生成以下SQL: [dbo].[CategoryMatch]([CategoryId],?)=1 使用以下HQL生成器:C# Nhibernate-表值函数,c#,linq,nhibernate,linq-to-nhibernate,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() }), treeBuilde
treeBuilder.Equality(treeBuilder.MethodCall("[dbo].[CategoryMatch]", new[] {
visitor.Visit(arguments[0]).AsExpression(),
visitor.Visit(arguments[1]).AsExpression()
}), treeBuilder.Constant(1));
然而,我发现这并不如说:
[CategoryId]位于(从[dbo]中选择[Id]。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")
)
)
)
);
treeBuilder.In(
visitor.Visit(arguments[0]).AsExpression(),
treeBuilder.MethodCall("SELECT [Id] FROM [dbo].[GetCategories]", new[] {
visitor.Visit(arguments[1]).AsExpression()
}).AsExpression()
)
但这就产生了错误:
不支持指定的方法
我已设法提出以下建议:
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")
)
)
)
);
treeBuilder.In(
visitor.Visit(arguments[0]).AsExpression(),
treeBuilder.MethodCall("SELECT [Id] FROM [dbo].[GetCategories]", new[] {
visitor.Visit(arguments[1]).AsExpression()
}).AsExpression()
)
这是一个有点黑客,但它的工作,所以我想它会做的现在