小编Joh*_*ohn的帖子

NHibernate使用ICriteria关联子查询

我一直在为即将到来的项目评估NHibernate做一些工作,并正在研究一些用例以了解它的表现.我还没有找到使用Criteri API表达以下查询的方法.

两个相当基本的表(为了这个例子的目的而减少)

CREATE TABLE Person
(
    PersonNo  INT,
    BirthDate DATETIME
)

CREATE TABLE PersonDetails
(
    PersonNo  INT,
    FirstName VARCHAR(30),
    Surname   VARCHAR(30)
)
Run Code Online (Sandbox Code Playgroud)

而查询......

SELECT P.PersonNo, P.FirstName, P.Surname
FROM Persons P
JOIN PersonDetails PD
  ON PD.PersonNo = P.PersonNo
 AND EffDate =
    (
        SELECT MAX(EffDate)
        FROM PersonDetails
        WHERE PersonNo = PD.PersonNo
    )
WHERE P.PersonNo = 1
Run Code Online (Sandbox Code Playgroud)

基本上,我只是想将人员主记录和最新人员修订记录压缩成一个对象.我能够使用HQL轻松地完成此操作但无法使相关子查询起作用.

这是我的尝试.

var pdSub = DetachedCriteria.For<PersonRevision>("pdSub")
    .SetProjection(
        Projections.ProjectionList()
            .Add(Projections.Max("EffDate").As("MaxEffDate"))
            .Add(Projections.Property("Person.PersonNo").As("PersonNo")) 
            .Add(Projections.GroupProperty("Person.PersonNo")))
    .Add(Expression.EqProperty("pdSub.Person.PersonNo", "p.PersonNo"));    

var p =
    session.CreateCriteria<Person>("p")                                                
        .Add(Restrictions.Eq("p.PersonNo", 1))
        .Add(Subqueries.Eq("p.PersonNo", pdSub))
        .List();  
Run Code Online (Sandbox Code Playgroud)

子查询pdSub已经定义了关系(通过PersonNo),但是子查询类需要定义另一个关系(例如Eq)?

任何帮助,将不胜感激.

谢谢,约翰

nhibernate icriteria correlated-subquery

2
推荐指数
1
解决办法
3842
查看次数