代码之家  ›  专栏  ›  技术社区  ›  Trevor

在NHibernate中,如何组合两个DetachedCriteria实例

  •  0
  • Trevor  · 技术社区  · 16 年前

    SELECT * FROM Items I INNER JOIN SubItems S on S.FK = I.Key
    

    显示此联接结果的用户界面允许用户指定其他条件:例如:

    I.SomeField = 'UserValue'.
    

    现在,我需要最后的加载命令是:

    SELECT * FROM Items I INNER JOIN SubItems S on S.FK = I.Key
    WHERE I.SomeField = 'UserValue'
    

    我的问题是:我创建了一个DetachedCriteria,其中包含查询的“static”方面(top join),UI创建了一个DetachedCriteria,其中包含查询的“dynamic”组件。我需要将这两者结合成一个最终的查询,以便在NHibernate会话上执行。

    Add()接受一个ICriterion(它是使用Expression类创建的,也许我不知道的其他类可以解决我的问题)。

    有人知道我该怎么做吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Tim Cooper    14 年前

    你可以用 GetExecutableCriteria 要将分离的条件转换为特定会话的可执行形式,请执行以下操作:

    var query = DetachedCriteria.For<...>();
    
    using (var session = ...)
    using (var transaction = session.BeginTransaction())
    {
        query.GetExecutableCriteria(session)
        transaction.Commit();
    }
    

    不过,我觉得你的设计有点缺陷。UI应该是对标准的补充,而不是创建自己的标准。最坏的情况是,它应该会产生 ICriterion