nhibernate分组依据和联接查询

nhibernate分组依据和联接查询,nhibernate,linq-to-nhibernate,nhibernate-criteria,queryover,Nhibernate,Linq To Nhibernate,Nhibernate Criteria,Queryover,我需要nhiberante查询(而不是HQL)等价于以下SQL: SELECT ur.* FROM (SELECT MAX(requestTime) rt, macAddress ma FROM UpdateRequests GROUP BY macAddress) mur JOIN dbo.UpdateRequests ur ON mur.ma = ur.macAddress AND mur.rt = ur.requestTime 我在stackoverflow上没有其他类似

我需要nhiberante查询(而不是HQL)等价于以下SQL:

SELECT ur.*
FROM (SELECT MAX(requestTime) rt, macAddress ma
    FROM UpdateRequests
    GROUP BY macAddress) mur
JOIN dbo.UpdateRequests ur
ON mur.ma = ur.macAddress AND mur.rt = ur.requestTime
我在stackoverflow上没有其他类似的例子。
有了UpdateRequest映射,使用查询API似乎是不可能的,那么QueryOver呢

最后,一位大师建议我在不更改执行计划的情况下更改SQL查询:

SELECT  ur.*
FROM    [dbo].[UpdateRequests] AS ur
WHERE   ur.[RequestTime] = (SELECT MAX(mur.[RequestTime])
                            FROM   [dbo].[UpdateRequests] mur
                            WHERE  mur.[MacAddress] = ur.[MacAddress])
因此,在代码中,它转换为:

session
    .Query<UpdateRequest>()
    .Where(ur => ur.RequestTime == session.Query<UpdateRequest>()
                                          .Where(mur => mur.MacAddress == ur.MacAddress)
                                          .Max(mur => mur.RequestTime))
    .ToList();
会话
.Query()
.Where(ur=>ur.RequestTime==session.Query()
.Where(mur=>mur.MacAddress==ur.MacAddress)
.Max(mur=>mur.RequestTime))
.ToList();

这正是我所需要的。

您无法使用QueryOver从派生表进行查询,因此无法进行精确的查询。然而,我认为这可以用子查询重写,这是一个可接受的解决方法吗?