2011-12-15 42 views
3

假設是這樣的:獲取自定義屬性形式lambda表達式

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; 
    } 
} 

此方法從另一個程序集調用,這個方法爲例調用:

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

對於T參數是確定我看到我的自定義屬性。但形成lambda表達式我不能看到我的自定義屬性。

+0

btw ...``entityType`在這裏更簡單,就像`typeof(T)`,不是嗎? – 2011-12-15 21:33:47

回答

1

假設你只是想看看,如果指定的每個選擇具有屬性:

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

目前尚不清楚你打算如何把它插入到該Find方法的休息,但我認爲涵蓋了這個問題的主要內容。