在BuildHql中创建“IN”或“JOIN”子句

时间:2013-06-25 05:36:23

标签: nhibernate fluent-nhibernate

我正在尝试与自定义HQL生成器一起使用LINQ表达式,并且在查找构建相应HQL的文档时遇到了一些麻烦。

我已经设法解决了如何将任意LINQ表达式注入HQL。这可行,但实现强制NHibernate水合对象并在内存中执行操作。实际上,这个(或简单的“sqlmethod”调用)很容易找到实例。

当我知道确切的课程时,我可以通过“QueryOver”获得我需要的地方:

var query = session.QueryOver<Trip>(() => trip)
                   .JoinAlias(() => trip.AccessControl, () => ace, JoinType.InnerJoin)
                   .Where(() => ace.EntityName == entityName);

我正在努力的是如何使用“IN”或“JOIN”条款来做到这一点。

public override HqlTreeNode BuildHql(
        MethodInfo method,
        Expression targetObject,
        ReadOnlyCollection<Expression> arguments,
        HqlTreeBuilder treeBuilder,
        IHqlExpressionVisitor visitor)
    {
        // This entity has a 'AccessControl' property 
        // containing an access control list 
        var securable = visitor.Visit(targetObject).AsExpression();
        // This is my problem:  How do I build the previous QueryOver in here?
        return treeBuilder.Join(/* HqlExpression */null, /* HqlAlias */null);

    }

我在视觉上围绕着NHibernate GitHub仓库,包括测试,但找不到任何能够解决问题的东西。谷歌也出现了nada。

0 个答案:

没有答案