NHibernate Overcoming NotSupportedException

linq, nhibernate, notsupportedexception

Solution

Name the specification expression and reuse that, e.g:

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

public virtual bool IsAbove(User otherUser)
{
    return IsAboveSpecification(HeirarchyString, otherUser.HeirarchyString);
}

Reuse IsAboveSpecification in the query as needed. If the IsAbove() method is used often use can cache the result of the Compile() method on the expression.

Problem

Does anyone know of any way to overcome NotSupportedException? I have a method against a User: ``` public virtual bool IsAbove(User otherUser) { return HeirarchyString.StartsWith(otherUser.HeirarchyString); } ``` And I want to do: ``` _session.Query<User>.Where(x => loggedInUser.IsAbove(x)); ``` But this throws a NotSupportedException. The real pain though is that using ``` _session.Query<User>.Where(x => loggedInUser.HeirarchyString.StartsWith(x.HeirarchyString)); ``` works absolutely fine. I don't like this as a solution, however, because it means that if I change how the IsAbove method works, I have to remember all the places where I have duplicated the code whenever I want to update it

Original source