【问题标题】:Using a subquery for a column with QueryOver使用 QueryOver 对列使用子查询
【发布时间】:2011-08-20 19:00:15
【问题描述】:

我正在尝试通过 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 = ...

我已经完成了投影,但我不确定如何恢复整个文档表。 Documents 与 Events 是一对多的关系,我不想外连接,因为它会带来多个结果,内连接可能不会带回一行:

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 中执行查询的属性。

【问题讨论】:

标签: nhibernate subquery queryover


【解决方案1】:

经过一些研究,看起来 HQL(QueryOver 转换成的)不支持子查询内的 TOP。

我的解决方案:创建一个包含计算属性的视图,然后在映射文件中将这些属性标记为insert="false"update="false"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多