我正在尝试将 NHibernate 会话对象的 IQueryOver 接口与 LINQ 表达式一起用作在静态类中选择记录的标准。LINQ 表达式在映射类中定义为Expression<Func<T, object>>
获取对象 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 在委托中不可用。我在这里做错了什么?