我试图在where子句中编写相关的子查询,如下所示:
var foo = from d in session.Query<Document>()
where true ==
( from a in session.Query<ACLEntry>()
where a.Id == d.Id || a.Id == null
select a.Result
).FirstOrDefault()
select d;
预期的SQL输出与this unanswered question on SO非常相似。
我认为Linq声明本身很好,因为我可以让它在我正在进行原型设计的LinqPad中运行。但是NHibernate把这些神秘的错误抛给了我:
错误NHibernate.Hql.Parser [(null)] - NoViableAltException(86 @ [])
错误NHibernate.Hql.Parser [(null)] - MismatchedTreeNodeException(72!= 3)
这是NHibernate LINQ提供程序不支持的场景吗?关于我如何能够重构这个查询以解决它的任何想法?
答案 0 :(得分:0)
请改为尝试:
var foo = from d in session.Query<Document>()
where (from a in session.Query<ACLEntry>()
where a.Id == d.Id || a.Id == null
select a.Result
).FirstOrDefault() != null
select d;
希望这会有所帮助!!
答案 1 :(得分:0)
解析查询的true == ...
部分时可能会遇到一些问题。
可能想尝试一下,
var foo = from d in session.Query<Document>()
where (from a in session.Query<ACLEntry>()
where a.Id == d.Id || a.Id == null
select a.Result
).FirstOrDefault()
select d;