2011-01-13 8 views
1
public IQueryable<T> All() 
    { 
     var session = _sessionFactory.GetCurrentSession(); 
     return FilterByClientId(from r in session.Query<T>() select r); 
    } 

    public IQueryable<T> FilterByClientId(IQueryable<T> queryable) 
    { 
     return queryable.Where(row => _clientIds.ClientIds.Contains<long>(row.ClientId)); 
    } 

デコレーションを処理するメソッドでカスタム属性を使用できますか?結果のコードは次のようになります。 ClientFilterを使用してAllメソッドを呼び出すと、自動的に結果が飾られます。C#のカスタム属性を装飾メソッドの結果に使用

[ClientFilter] 
    public IQueryable<T> All() 
    { 
     var session = _sessionFactory.GetCurrentSession(); 
     return from r in session.Query<T>() select r; 
    } 

答えて

1

あなたは、属性を使用してメソッドの動作を変更することを可能にする、PostSharpを探しています。

しかし、これは非常に複雑なものになり、これは単純なことでは価値がないかもしれません。

0

私はあなたが求めているものを理解していれば、その答えはイエス、おそらくですが、属性を使用しての複雑さは、それだけの価値はありません。 2番目のコードサンプルを単純に次のようにするのは簡単ではないでしょうか?

// Edited to make more sense, but see below... 
public IQueryable<T> FilterByClientId() 
{ 
    return All().Where(row => _clientIds.ClientIds.Contains<long>(row.ClientId)); 
} 

はEDIT:あなたのコメントに基づいて、一般的な制約と拡張メソッドとしてFilterByClientIdを定義してみてください。

public static IQueryable<T> FilterByClientId(this IQueryable<T> queryable) where T : IHasClientId 
{ 
    return queryable.Where(row => _clientIds.ClientIds.Contains<long>(row.ClientId)); 
} 
+0

IQueryableを返すいくつかのメソッドでClientFilterを適用できるようにしたいここで、T:IHasClientID –

関連する問題