【问题标题】:nhibernate group by and join querynhibernate group by 和 join 查询
【发布时间】:2014-09-04 14:56:24
【问题描述】:

我需要在 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 映射,Query API 似乎是不可能的,那么 QueryOver 呢?

【问题讨论】:

  • 您不能使用 QueryOver 从派生表中进行查询,因此这个 exact 查询是不可能的。但是我认为这可以用子查询重写,这是可以接受的解决方法吗?

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


【解决方案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();

而这正是我所需要的。

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多