如何使用NHibernate Linq provider的group by子句获取最新/最后一条记录
我在这件事上花了太多时间,我真的希望有人能帮我。 我发现了一个通用的好方法,所以让我们坚持下去 我正在尝试生成此查询,但NHibernate无法生成正确的sql并返回sql查询异常 列如何使用NHibernate Linq provider的group by子句获取最新/最后一条记录,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我在这件事上花了太多时间,我真的希望有人能帮我。 我发现了一个通用的好方法,所以让我们坚持下去 我正在尝试生成此查询,但NHibernate无法生成正确的sql并返回sql查询异常 列vSagsAendring.Id在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。它无法执行以下查询: select viewsagsae0_.Id as Id155_, viewsagsae0_.SagId as SagId155_, viewsagsae0_.Journa
vSagsAendring.Id
在选择列表中无效,因为它未包含在聚合函数或GROUP BY
子句中。它无法执行以下查询:
select
viewsagsae0_.Id as Id155_,
viewsagsae0_.SagId as SagId155_,
viewsagsae0_.JournalNr as JournalNr155_,
viewsagsae0_.LbfNr as LbfNr155_,
viewsagsae0_.OrgNr as OrgNr155_,
viewsagsae0_.OrgNavn as OrgNavn155_,
viewsagsae0_.AfdNavn as AfdNavn155_,
viewsagsae0_.SagsType as SagsType155_,
viewsagsae0_.Status as Status155_,
viewsagsae0_.SagsbehandlerInit as Sagsbeh10_155_,
viewsagsae0_.Dato as Dato155_,
viewsagsae0_.JournalAktionType as Journal12_155_,
viewsagsae0_.Beskrivelse as Beskriv13_155_,
viewsagsae0_.Ekstern as Ekstern155_
from vSagsAendring viewsagsae0_
group by viewsagsae0_.SagId
var query=来自会话中的p.query()
p组:p.SagId
玻璃钢
选择grp.OrderByDescending(g=>g.Dato.First();
这是文章的另一个版本:
var query = from p in _session.Query<ViewSagsAendring>()
group p by p.SagId
into grp
let maxDato = grp.Max(g => g.Dato)
from p in grp
where p.Dato == maxDato
select p;
var query=来自会话中的p.query()
p组:p.SagId
玻璃钢
设maxDato=grp.Max(g=>g.Dato)
从p到grp
其中p.Dato==maxDato
选择p;
对于EntityFramework中的LINQ,您的查询似乎是合法的。
我不确定hibernate,您可以尝试使用QueryOverAPI而不是Query
这是一段漫长的旅程,但现在结束了。我希望我能通过回答自己的问题来帮助其他处于同样情况的人
var aendring = from sagsAendring in _session.Query<ViewSagsAendring>()
where sagsAendring.Dato ==
(
from innersagsAendring in _session.Query<ViewSagsAendring>()
where innersagsAendring.SagId == sagsAendring.SagId
select innersagsAendring.Dato
).Max()
select sagsAendring;
var result = aendring.ToList();
var aendring=来自_session.Query()中的sagsAendring
sagsAendring,Dato在哪里==
(
来自_session.Query()中的innersagsAendring
其中innerSagendring.SagId==sagsAendring.SagId
选择innersagsAendring.Dato
).Max()
选择sagsAendring;
var result=aendring.ToList();
因为可以链接linq语句,所以可以像这样构建linq过滤器
if(Filters.VisInterneAendringer == false)
query = query.Where(x => x.Ekstern == true);
if (Filters.VisKunNyesteAendringer)
{
query = query.Where(sagsAendring => sagsAendring.Dato ==
(
from innerSagsAendring in Session.Query<ViewSagsAendring>() where innerSagsAendring.SagId == sagsAendring.SagId
select innerSagsAendring.Dato
).Max());
}
return query;
if(Filters.VisInterneAendringer==false)
query=query.Where(x=>x.Ekstern==true);
if(过滤器。Viskunnyesteandringer)
{
query=query.Where(sagsAendring=>sagsAendring.Dato==
(
来自Session.Query()中的innerSagsAendring,其中innerSagsAendring.SagId==sagsAendring.SagId
选择innerSagsAendring.Dato
).Max());
}
返回查询;
您使用的是NH的哪个版本?NHibernate版本3.3.3.4001
if(Filters.VisInterneAendringer == false)
query = query.Where(x => x.Ekstern == true);
if (Filters.VisKunNyesteAendringer)
{
query = query.Where(sagsAendring => sagsAendring.Dato ==
(
from innerSagsAendring in Session.Query<ViewSagsAendring>() where innerSagsAendring.SagId == sagsAendring.SagId
select innerSagsAendring.Dato
).Max());
}
return query;