【问题标题】:How to specify multiple condition in Join statement rather than in Where block in NHibernate QueryOver如何在 Join 语句中而不是在 NHibernate QueryOver 中的 Where 块中指定多个条件
【发布时间】:2025-12-28 14:55:10
【问题描述】:

以下 QueryOver 在 Where 块中生成子查询,但我宁愿寻找在连接语句中指定该条件的方法

var productsWithLatestComments = _sessionHelper.GetSession().QueryOver(() => p)
                .Left.JoinAlias(() => p.Comments, () => cm)
                .WithSubquery.Where(() => cm.CommentDate == QueryOver.Of<Comment>()
                    .Where(c => c.Product.Id == p.Id)
                    .SelectList(list => list.SelectMax(c => c.CommentDate)).As<DateTime>())
                .Where(() => p.Status != "NOT SOLD" )
                .SelectList(list => list ....GET THE LIST OF COLS.........

这会产生类似

的东西
SELECT this_.id as y0_, ......... FROM product this_ 
left outer join comment cn1_ on this_.id=cn1_.product_id 
WHERE cn1_.comment_date = (SELECT max(this_0_.created_date) as y0_ FROM comment this_0_ WHERE this_0_.product_id = this_.id) and (not (this_.status = ?p0);?p0 = 'Sold Out'' [Type: String (18)]

但我一直在寻找

SELECT this_.id as y0_, ......... FROM product this_ 
left outer join comment cn1_ on this_.id=cn1_.product_id and cn1_.comment_date = (SELECT max(this_0_.created_date) as y0_ FROM comment this_0_ WHERE this_0_.product_id = this_.id)
WHERE (not (this_.status = ?p0);?p0 = 'Sold Out'' [Type: String (18)]

【问题讨论】:

    标签: mysql asp.net-mvc-3 nhibernate queryover


    【解决方案1】:

    好的,我通过在连接别名内而不是在 .WithSubquery 内指定子查询,在 QueryOver 中进行了一些更改

    var productsWithLatestComments = _sessionHelper.GetSession().QueryOver(() => p)
                    .JoinAlias(() => p.Comments, () => cm, JoinType.LeftOuterJoin, Subqueries.Where(() => cm.CommentDate == QueryOver.Of<Comment>()
                        .Where(c => c.Product.Id == p.Id)
                        .SelectList(list => list.SelectMax(c => c.CommentDate)).As<DateTime>()))
                    .Where(() => p.Status != "NOT SOLD" )
                    .SelectList(list => list ....GET THE LIST OF COLS.........
    

    【讨论】: