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コール:Tパラメータについては
var container = new List<MyClass>();
var q = (from m in container
select m).AsQueryable();
SimpleFilter.Find(q, "something", m => m.Navigation);
がOKである私が見ます私のカスタム属性。しかしラムダ式を作成すると私のカスタム属性が表示されません。
var member = ((MemberExpression) include.Body).Member;
bool hasAttribute = Attribute.IsDefined(member, typeof (FilterAttribute));
あなたがFind
方法の残りの部分にそれをプラグインするつもりかは明らかではないが、私はと思い:あなただけ指定した各セレクタが属性を持っているかどうかを確認したいと仮定すると、
btw ... 'entityType'は' typeof(T) 'の方が簡単です。 –