假设这样的事情:
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 :(得分:1)
假设您只想查看指定的每个选择器是否具有属性:
var member = ((MemberExpression) include.Body).Member;
bool hasAttribute = Attribute.IsDefined(member, typeof (FilterAttribute));
目前尚不清楚您打算如何将其插入Find
方法的其余部分,但我认为涵盖了问题的主要内容。