NH能否创建像
这样的JOIN SELECT查询 Select * From table1 Join ( Select * From table2 ...?
为什么他不能。
在我的任务中,我有一个简单的表格:
TABLE [Message](
[Id] [int] NOT NULL,
[DocId] [int] NOT NULL,
[RecipientId] [bigint] NOT NULL,
[Text] [nvarchar](255) NULL,
[ArrivalDate] [date] NOT NULL
选择:
SELECT msg.*
FROM [Message] msg
JOIN( SELECT msgMaxForDoc.DocId, MAX(msgMaxForDoc.ArrivalDate) AS ArrivalDate
FROM [Message] msgMaxForDoc
GROUP BY msgMaxForDoc.DocId) docAndDate ON msg.DocId = docAndDate.DocId AND msg.ArrivalDate = docAndDate.ArrivalDate
WHERE msg.RecipientId = @UserId
完整任务听起来像:“为用户选择所有消息。如果文档(由DocId表示)包含多条消息,则获取最新消息”。结果我必须为UserId
限制的所有DocId选择一条最新消息我在这里发现了类似的问题: nhibernate queryover join with subquery to get aggregate column 但它没有帮助(我没有任何链接到另一个平板电脑DocId只是数字)。
这里Join a Subquery with NHibernate(但我不能将选择分为两部分......)
答案 0 :(得分:0)
据我所知,使用NHibernate加入子查询是不可能的。但是,您可以使用“WHERE EXISTS”方法实现目标:
var dCriteria = DetachedCriteria.For<Message>("grouped")
.SetProjection(Projections.GroupProperty("grouped.DocId"))
.SetProjection(Projections.Max("grouped.ArrivalDate"))
.Add(Restrictions.EqProperty("msg.DocId", "grouped.DocId"))
.Add(Restrictions.EqProperty("msg.ArrivalDate", "grouped.ArrivalDate"))
.Add(Restrictions.Eq("grouped.RecipientId", @UserId));
var userMessages = Session.CreateCriteria<Message>("msg")
.Add(Subqueries.Exists(dCriteria)).List<Message>();