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

代わりにこれを試してください:

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 に答える
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 に答える