次のように 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 プロバイダーではサポートされていないシナリオですか? このクエリを再構築して回避する方法についてのアイデアはありますか?