Получить пользовательские атрибуты формы лямбда-выражения - PullRequest
3 голосов
/ 16 декабря 2011

Предположим, что-то вроде этого:

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 все в порядке, я вижу свой пользовательский атрибут. Но из лямбда-выражения я не вижу своего пользовательского атрибута.

1 Ответ

1 голос
/ 16 декабря 2011

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

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

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

...