C# 如何在不选择属性的情况下生成Nhibernate GROUP BY

C# 如何在不选择属性的情况下生成Nhibernate GROUP BY,c#,sql,nhibernate,fluent-nhibernate,C#,Sql,Nhibernate,Fluent Nhibernate,我想解决这个问题: SELECT Max(Date) FROM Table GROUP BY SubId (然后将其作为子查询传递给mid action,以便获得表中项目的Id) (然后使用其他表联接获取完整表项) 我试过这样的要求: var subquery = QueryOver.Of<Table>(() => x) .SelectList(list => list .SelectMax

我想解决这个问题:

SELECT Max(Date)
FROM Table
GROUP BY SubId
(然后将其作为子查询传递给mid action,以便获得表中项目的Id)

(然后使用其他表联接获取完整表项)

我试过这样的要求:

var subquery = QueryOver.Of<Table>(() => x)
                    .SelectList(list => list
                    .SelectMax(() => x.Date)
                    .SelectGroup(() => x.Sub.Id)
                );

                var filter = QueryOver.Of<Table>().WithSubquery.
                    WhereExists(subquery)
                    .Select(p => p.Id);

                var result = Session.QueryOver<Table>().WithSubquery.WhereProperty(p => p.Id).In(filter).Left.JoinQueryOver(p => p.Sub).List();
var subquery=QueryOver.Of(()=>x)
.SelectList(list=>list
.SelectMax(()=>x.Date)
.SelectGroup(()=>x.Sub.Id)
);
var filter=QueryOver.Of().WithSubquery。
WhereExists(子查询)
.选择(p=>p.Id);
var result=Session.QueryOver().WithSubquery.WhereProperty(p=>p.Id).In(filter.Left.JoinQueryOver(p=>p.Sub.List();
但问题是,我不能在第一个请求中只保留请求的日期。 有比这种子查询更好的方法吗?在NHibernate中,是否有可能不选择某个属性而通过该属性进行分组


谢谢

最后,它以这种方式生成了我想要的SQL。但它不是3个子查询,而是3个查询在一组数据(数组子查询和相应的ID)中查找

var subquery=Session.QueryOver(()=>x)
.SelectList(list=>list
.SelectMax(()=>x.Date)
.SelectGroup(()=>x.Sub.Id))
.List().Select(p=>p[0]).ToArray();
var CorrespondingIds=Session.QueryOver(()=>x)
.WhereRestrictionOn(()=>x.Date).IsIn(子查询)
.Select(p=>p.Id).List().ToArray();
var result=Session.QueryOver(()=>x).WhereRestrictionOn(()=>x.Id).IsIn(correspondingId).Left.JoinQueryOver(p=>p.Sub.List();

这是可能的。检查和/或感谢您的提示。我会再试一次,但现在我找到了一个解决方案。@Revv:这里有一个可能的解决方案:这是一个很好的解决方案!伟大的享受快乐
SELECT *
FROM Table
LEFT JOIN...
WHERE Id in
[[[ previous request ]]]
var subquery = QueryOver.Of<Table>(() => x)
                    .SelectList(list => list
                    .SelectMax(() => x.Date)
                    .SelectGroup(() => x.Sub.Id)
                );

                var filter = QueryOver.Of<Table>().WithSubquery.
                    WhereExists(subquery)
                    .Select(p => p.Id);

                var result = Session.QueryOver<Table>().WithSubquery.WhereProperty(p => p.Id).In(filter).Left.JoinQueryOver(p => p.Sub).List();
var subquery = Session.QueryOver<Table>(() => x)
                    .SelectList(list => list
                    .SelectMax(() => x.Date)
                    .SelectGroup(() => x.Sub.Id))
                    .List<object[]>().Select(p => p[0]).ToArray();


                var CorrespondingIds = Session.QueryOver<Table>(() => x)
                    .WhereRestrictionOn(() => x.Date).IsIn(subquery)
                    .Select(p => p.Id).List<int>().ToArray();

                var result = Session.QueryOver<Table>(() => x).WhereRestrictionOn(() => x.Id).IsIn(CorrespondingIds).Left.JoinQueryOver(p => p.Sub).List();