我正试图通过QueryOver获得类似于SQL的内容:
SELECT
docs.*,
(SELECT TOP 1 eventDate from events WHERE id=docs.id
AND type=4 ORDER BY eventDate DESC) as eventDate
FROM documents as docs
WHERE doc.accountId = ...
我已接近投影,但我不知道如何获得整个文件表。文档与事件有一对多的关系,我不想外连接,因为它会带来多个结果,内连接可能不会带回一行:
var query = QueryOver<Document>
.Where(d => d.Account == account)
.SelectList(list => list
.Select(d => d)
.Select(d => d.Events.OrderByDescending(e => e.EventDate).FirstOrDefault(e => e.Type == 4))
)
.List<object[]>()
.Select(d => return new DocumentSummary(d[0],d[1]) etc.);
是否有更简单的方法为列执行子查询?我不愿意将其替换为在get
中执行查询的属性。
答案 0 :(得分:1)
经过一些研究后,看起来HQL(QueryOver被转换为)不支持TOP子查询中的内容。
我的解决方案:创建一个包含计算属性的视图,然后在映射文件中将这些属性标记为insert="false"
和update="false"