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() в выражении.