Linq NHibernate不支持例外

Linq NHibernate不支持例外,linq,nhibernate,notsupportedexception,Linq,Nhibernate,Notsupportedexception,有人知道克服NotSupportedException的方法吗?我有一个针对用户的方法: public virtual bool IsAbove(User otherUser) { return HeirarchyString.StartsWith(otherUser.HeirarchyString); } 我想做: _session.Query<User>.Where(x => loggedInUser.IsAbove(x)); \u session.Qu

有人知道克服NotSupportedException的方法吗?我有一个针对用户的方法:

 public virtual bool IsAbove(User otherUser)
 {
     return HeirarchyString.StartsWith(otherUser.HeirarchyString);
 }
我想做:

_session.Query<User>.Where(x => loggedInUser.IsAbove(x));
\u session.Query.Where(x=>loggedInUser.isbove(x));
但这引发了一个NotSupportedException。但真正的痛苦是使用

_session.Query<User>.Where(x => loggedInUser.HeirarchyString.StartsWith(x.HeirarchyString));
\u session.Query.Where(x=>loggedInUser.heirarchysting.StartsWith(x.heirarchysting));

效果绝对不错。但是,我不喜欢将此作为解决方案,因为这意味着如果我更改IsAbove方法的工作方式,每当我想更新代码时,我必须记住复制代码的所有地方,命名规范表达式并重用它,例如:

public Expression<Func<....>> IsAboveSpecification = (...) => ...;

public virtual bool IsAbove(User otherUser)
{
    return IsAboveSpecification(HeirarchyString, otherUser.HeirarchyString);
}
公共表达式规范=(…)=>。。。;
公共虚拟bool isbove(用户其他用户)
{
返回IsAboveSpecification(HeirarchyString,otherUser.HeirarchyString);
}

根据需要在查询中重用规范。如果经常使用IsAbove()方法,则可以在表达式上缓存Compile()方法的结果。

ah crap,当人们不能拼写时,我总是第一个指出!多年来,我一定是弄错了:$我和OP有同样的问题。无法让这个解决方案工作。首先,我希望能够调用对象,因此我必须将初始化移到构造函数中,因为
这个
在成员初始值设定项中不可用。更糟糕的是,我在尝试调用规范表达式时出错:“预期的方法、委托或事件”。有什么建议吗?尝试对表达式调用.Compile().Invoke()。它现在可以编译,但从查询中调用函数“IsAbove”时会遇到相同的异常。无法从查询中调用表达式的原因有几个:首先,当它标记为public时,NH抱怨字段必须是受保护的或私有的。第二,当我尝试从外部查询调用它时,我得到了与上面相同的“方法、委托或事件预期”编译器错误。我不认为NH会抱怨某些东西是公开的-它坚持认为,
virtual
修饰符是存在的。谢谢你的建议。现在有点进展了,但我相信我们会回到这个话题上。当这再次变得相关时,我会问一个新问题(会的!)。