6

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 メソッドの動作を変更すると、コードを更新するたびに、コードを複製したすべての場所を覚えておく必要があるため、これは解決策としては好きではありません。

4

1 に答える 1

3

仕様式に名前を付けて再利用します。例:

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

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

必要に応じて、クエリで IsAboveSpecification を再利用します。IsAbove() メソッドが頻繁に使用される場合は、式の Compile() メソッドの結果をキャッシュできます。

于 2012-06-18T09:24:12.607 に答える