0

我正在尝试在 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 输出与SO 上未回答的问题非常相似。

我认为 Linq 语句本身很好,因为我可以让它在我进行原型设计的 LinqPad 中运行。但是 NHibernate 向我抛出了这些神秘的错误:

错误 NHibernate.Hql.Parser [(null)] - NoViableAltException(86@[])

错误 NHibernate.Hql.Parser [(null)] - MismatchedTreeNodeException(72!=3)

这是 NHibernate LINQ 提供程序不受支持的场景吗?关于我如何能够重组此查询以解决它的任何想法?

4

2 回答 2

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;
于 2013-03-05T01:02:07.863 回答
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;

希望这会有所帮助!

于 2013-03-04T17:07:03.623 回答