我有一张桌子:
Table { Id, Date, Number, Bool }
我需要按Number对其进行分组,选择每个组中包含max Date的行,并为每个组检索Id。最后,我需要将其过滤为仅包含!Bool
的记录。我想用Linq Nhibernate做这件事。
这个SQL似乎正在做我想要的事情:
select Id from
(select MAX(Date) as Dt, Number as N from Table group by Number) t, Table table
where table.Date = t.Dt and table.Number = t.N and table.Bool = 0
但事实证明,NHibernate不允许子查询在from
中。我如何用Linq Nhibernate写这个?
它也非常重要,因为它有效,所以我宁愿避免在select或其中的子查询,如果它们迭代整个集和(N + 1)查询问题。
直截了当的方法也不起作用:
Session.Query<Table>().GroupBy(x => x.Number)
.Select(x => x.Where(y => y.Date == x.Max(z => z.Date)))...