从lambda表达式获取自定义属性

时间:2011-12-15 21:13:43

标签: c# reflection custom-attributes

假设这样的事情:

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表达式我看不到我的自定义属性。

1 个答案:

答案 0 :(得分:1)

假设您只想查看指定的每个选择器是否具有属性:

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

目前尚不清楚您打算如何将其插入Find方法的其余部分,但我认为涵盖了问题的主要内容。