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

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

该方法由另一个程序集调用,例如:

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

对于T参数,我可以看到我的自定义属性。但是对于lambda表达式,我无法看到我的自定义属性。

顺便说一下...这里的entityTypetypeof(T)更简单,不是吗? - Marc Gravell
1个回答

1
假设您只想查看每个指定选择器是否具有该属性:
var member = ((MemberExpression) include.Body).Member;
bool hasAttribute = Attribute.IsDefined(member, typeof (FilterAttribute));

你打算如何将其插入到Find方法的其他部分并不清楚,但我认为这涵盖了问题的主要重点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接