NHibernate Преодоление NotSupportedException

Кто-нибудь знает какой-либо способ преодолеть NotSupportedException? У меня есть метод против пользователя:

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

И я хочу сделать:

_session.Query<User>.Where(x => loggedInUser.IsAbove(x));

Но это создает исключение NotSupportedException. Настоящая боль, однако, в том, что использование

_session.Query<User>.Where(x => loggedInUser.HeirarchyString.StartsWith(x.HeirarchyString));

работает абсолютно нормально. Однако мне не нравится это решение, потому что оно означает, что если я изменю работу метода IsAbove, мне придется помнить все места, где я продублировал код, всякий раз, когда я хочу его обновить.

1 ответ

Решение

Назовите выражение спецификации и используйте его повторно, например:

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

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

При необходимости повторно используйте IsAboveSpecification в запросе. Если часто используется метод IsAbove(), use может кэшировать результат метода Compile() в выражении.

Другие вопросы по тегам