1

我需要nhiberante查詢(而不是HQL),相當於以下SQL的NHibernate組:通過並加入查詢

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 

我曾與計算器上的其他類似的例子沒有運氣。 有了UpdateRequest映射,看起來用Query API是不可能的,QueryOver怎麼樣?

+0

您無法使用QueryOver從派生表中進行查詢,因此無法使用* exact *查詢。不過,我認爲這可以用子查詢重寫,這是一個可接受的解決方法嗎? – 2014-09-04 15:09:26

回答

1

最後一個師建議我改變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(); 

而這正是我需要的。

+1

很高興你能將它工作,+1 – 2014-09-04 15:21:09