2011-12-15 2 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 вызов этого метода:

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

Для параметра T нормально я вижу мой пользовательский атрибут. Но сформируйте выражение лямбда, которое я не вижу в моем пользовательском атрибуте.

+0

btw ... 'entityType' проще, чем' typeof (T) 'здесь, нет? –

ответ

1

Предполагая, что вы просто хотите увидеть, если каждый селектор имеет указанный атрибут:

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

это не ясно, как вы собираетесь подключить, что в остальной части метода Find, но я думаю что основное внимание уделяется проблеме.

Смежные вопросы