Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq Nhibernate中选择组后具有最大值的行_C#_Nhibernate_Linq To Nhibernate - Fatal编程技术网

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,您永远无法从中使用自己的自定义。来自始终来自映射(通常