C# 在Linq Nhibernate中选择组后具有最大值的行
我有一张桌子:C# 在Linq Nhibernate中选择组后具有最大值的行,c#,nhibernate,linq-to-nhibernate,C#,Nhibernate,Linq To Nhibernate,我有一张桌子: Table { Id, Date, Number, Bool } 我需要按编号对它进行分组,在每个组中选择具有最大日期的行,并检索每个组的Id。最后,我需要对其进行过滤,使其只包含的记录!Bool。我正试着和林克·尼贝内特一起做这件事 此SQL似乎正在执行我想要的操作: select Id from (select MAX(Date) as Dt, Number as N from Table group by Number) t, Table table where tab
Table { Id, Date, Number, Bool }
我需要按编号对它进行分组,在每个组中选择具有最大日期的行,并检索每个组的Id。最后,我需要对其进行过滤,使其只包含的记录!Bool
。我正试着和林克·尼贝内特一起做这件事
此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或where中使用子查询,如果它们迭代整个集合和(N+1)查询问题
直截了当的方法也行不通:
Session.Query<Table>().GroupBy(x => x.Number)
.Select(x => x.Where(y => y.Date == x.Max(z => z.Date)))...
Session.Query().GroupBy(x=>x.Number)
.选择(x=>x.Where(y=>y.Date==x.Max(z=>z.Date))。。。
<>代码>您会考虑使用NHiBernt的SQL查询API特性,而不是使用LINQ编写这个函数吗?SQL API提供对在数据库级别运行的语句的完全控制。这是我最后选择的选项。我们的属性和db字段经常被重命名,我正在尝试最小化代码中硬编码文本的影响有一种类似的问题-它是子查询的查询,但它可以给你一些想法…@RadimKöhler谢谢你的提示,我会尝试一下,但这已经让我感到有多复杂了is@Archeg我知道。。但是你知道吗?使用ORM,您永远无法从中使用自己的自定义。来自始终来自映射(通常