NHibernate セッション オブジェクトの IQueryOver インターフェイスを、静的クラスでレコードを選択する基準として LINQ 式と共に使用しようとしています。Expression<Func<T, object>>
LINQ 式は、オブジェクト T の値を取得するためにマッピング クラスで定義されます。
public void SearchParameter(Expression<Func<T, object>>)
これらのパラメーターは、マッピング クラスを拡張することによって追加されます。
public MyMapping : FindMap<MyNHibernateMappedObject>
{
public MyMapping()
{
this.SearchParameter(x => x.SomeColumn);
}
}
私の Find クラスは、時間軸で同じタイプの前後のレコードを取得するための静的メソッドを定義します。各検索パラメーターは、両方のレコードで同一である必要があります。
Find クラスは、マッピング構成から検索パラメーターを取得し、.Compile() で式をコンパイルします。だから私は GetQueryWithSearchParameters メソッドを持っています:
private static Func<T, object> searchParameter;
...
public static IQueryOver<T, T> GetQueryWithSearchParameters(ISession session, T current)
{
var query = session.QueryOver<T>()
.Where(x => searchParameter(x) == searchParameter(current));
return query;
}
ただし、クエリを作成すると、次の例外が発生します。
System.InvalidOperationException: variable 'x' of type MyNHibernateMappedObject' referenced from scope '', but it is not defined
ここで何が起こっているのか正確にはわかりませんが、デリゲートで x が利用できないのではないかと思います。ここで何が間違っていますか?