nhibernate group by和join查询

时间:2014-09-04 14:56:24

标签: nhibernate linq-to-nhibernate nhibernate-criteria queryover

我需要在SQL之后使用nhiberante查询(而不是HQL):

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怎么样?

1 个答案:

答案 0 :(得分:1)

最后,一位Guru建议我在不改变执行计划的情况下更改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();

这正是我所需要的。