NHibernate克服NotSupportedException

Jor*_*ork 6 linq nhibernate notsupportedexception

有没有人知道克服NotSupportedException的任何方法?我有针对用户的方法:

 public virtual bool IsAbove(User otherUser)
 {
     return HeirarchyString.StartsWith(otherUser.HeirarchyString);
 }
Run Code Online (Sandbox Code Playgroud)

我想这样做:

_session.Query<User>.Where(x => loggedInUser.IsAbove(x));
Run Code Online (Sandbox Code Playgroud)

但是这会抛出NotSupportedException.真正的痛苦是使用

_session.Query<User>.Where(x => loggedInUser.HeirarchyString.StartsWith(x.HeirarchyString));
Run Code Online (Sandbox Code Playgroud)

工作得非常好.我不喜欢这个解决方案,但是,因为这意味着如果我改变了IsAbove方法的工作方式,我必须记住每当我想要更新它时我复制代码的所有地方

Osk*_*ren 3

命名规范表达式并重用它,例如:

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

public virtual bool IsAbove(User otherUser)
{
    return IsAboveSpecification(HeirarchyString, otherUser.HeirarchyString);
}
Run Code Online (Sandbox Code Playgroud)

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