我试图将一个NHibernate会话对象的IQueryOver接口与LINQ表达式一起用作选择静态类中的记录的标准。的LINQ表达式在一个映射类如Expression<Func<T, object>>
定义得到的值的对象T:通过扩展映射类NHibernate:与IQueryOver一起使用LINQ表达式
public void SearchParameter(Expression<Func<T, object>>)
这些参数被添加:
public MyMapping : FindMap<MyNHibernateMappedObject>
{
public MyMapping()
{
this.SearchParameter(x => x.SomeColumn);
}
}
我的查找该类定义的静态方法用于获取时间轴上相同类型的上一个和下一个记录。两个记录中的每个搜索参数必须相同。
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以某种方式在委托中不可用。我在这里做错了什么?