【问题标题】:NHibernate Linq query join subquery on two columnNHibernate Linq 查询在两列上连接子查询
【发布时间】:2013-12-15 19:59:13
【问题描述】:

一个“案例”可以有多种操作类型,每个操作都记录在日志中。 我只想显示最新日记条目的“案例”列表

这是 T-SQL 子查询

SELECT SagId, max(Dato) as maxdate FROM vOpgaveliste o group by SagId

这是 T-SQL 主查询

select o.* from
(
SELECT SagId, max(Dato) as maxdate
FROM vOpgaveliste o
group by SagId
)
as nyeste
join vOpgaveliste o on o.SagId = nyeste.SagId and o.Dato = nyeste.maxdate

我可以在 linq 中创建子查询

var queryInner = from o in query
                 where o.SagsbehandlerInit == "chr"
                 where o.Dato >= DateTime.Today && o.Dato <= DateTime.Today.AddDays(-7)
                 group o by o.SagId
                 into g
                 select new { SagId = g.Key, MaxDate = g.Max(d => d.Dato) };

然后我创建了这个查询

  var outer = from o in query
              from s in queryInner
              where s.SagId == o.SagId && s.MaxDate == o.Dato    
              select o;

但是 NHibernate 抛出 System.NotSupportedException 未被用户代码异常处理 我也尝试了这种语法https://stackoverflow.com/a/16918106/1147577,但在连接语句上出现语法错误

谢谢

【问题讨论】:

  • 这可能是 LINQ-to-NHibernate 根本不支持的情况...
  • queryInner 本身性能好吗?我想这是愚蠢的想法,但我想知道是否支持 DateTime.Today.AddDays(-7)
  • 是的,内部查询工作正常
  • 看看这个答案,它解决了一个与你非常相似的案例:stackoverflow.com/a/14633967/3057341

标签: linq tsql nhibernate


【解决方案1】:

NHibernate 根本不支持 from 语句块中的子查询。它仅在 Select 和 Where 块中支持。

我猜你必须想办法得到你的结果。

当然,linq to object 或许多其他 linq 提供程序支持各种疯狂的查询构造,linq to Nhibernate 实现只是有很多限制。

【讨论】:

  • 感谢您为我指明正确的方向。有谁知道如何用 queryover 来代替?
  • 这个有什么变化吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
相关资源
最近更新 更多