2011-12-15 6 views
3

と仮定何か属性を取得します:カスタムフォームのラムダ式にこのような

public static IQueryable<T> Find<T>(IQueryable<T> query, string value, params Expression<Func<T, object>>[] subSelectors) where T : class 
{ 
    foreach (var include in subSelectors) 
    { 
    var entityType = include.Body.Type.GetGenericArguments().First(); 
    var properties = from p in entityType.GetProperties() 
         where Attribute.IsDefined(p, typeof(FilterAttribute)) 
         select p; 
    } 
} 

このメソッドは、別のアセンブリから呼び出されると、この方法のexempleコール:Tパラメータについては

 var container = new List<MyClass>(); 
    var q = (from m in container 
       select m).AsQueryable(); 
    SimpleFilter.Find(q, "something", m => m.Navigation); 

がOKである私が見ます私のカスタム属性。しかしラムダ式を作成すると私のカスタム属性が表示されません。

var member = ((MemberExpression) include.Body).Member; 
bool hasAttribute = Attribute.IsDefined(member, typeof (FilterAttribute)); 

あなたがFind方法の残りの部分にそれをプラグインするつもりかは明らかではないが、私はと思い:あなただけ指定した各セレクタが属性を持っているかどうかを確認したいと仮定すると、

+0

btw ... 'entityType'は' typeof(T) 'の方が簡単です。 –

答えて

1

問題の主な推進力をカバーしています。