Возвращение вложенного универсального выражения <Func <T, bool >> - PullRequest
7 голосов
/ 13 мая 2009

Сообщение об ошибке: «Тип или имя пространства имен« T »не может быть найдено».

???

public static Expression<Func<T, bool>> MakeFilter(string prop, object val)
{
    ParameterExpression pe = Expression.Parameter(typeof(T), "p");
    PropertyInfo pi = typeof(T).GetProperty(prop);
    MemberExpression me = Expression.MakeMemberAccess(pe, pi);
    ConstantExpression ce = Expression.Constant(val);
    BinaryExpression be = Expression.Equal(me, ce);
    return Expression.Lambda<Func<T, bool>>(be, pe);
}

Ссылки по теме:

Использование отражения для адресации свойства Linqed

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/df9dba6e-4615-478d-9d8a-9fd80c941ea2/

Создание во время выполнения универсального Func

Ответы [ 3 ]

10 голосов
/ 13 мая 2009

Вам нужно сделать сам метод общим:

public static Expression<Func<T, bool>> MakeFilter<T>(string prop, object val)
                                                  -+-
                                                   ^
                                                   +- this
3 голосов
/ 13 мая 2009

Для вашего метода не определено ни одного общего аргумента. Вы должны определить один (MakeFilter<T>):

public static Expression<Func<T, bool>> MakeFilter<T>(string prop, object val)
{
    ParameterExpression pe = Expression.Parameter(typeof(T), "p");
    PropertyInfo pi = typeof(T).GetProperty(prop);
    MemberExpression me = Expression.MakeMemberAccess(pe, pi);
    ConstantExpression ce = Expression.Constant(val);
    BinaryExpression be = Expression.Equal(me, ce);
    return Expression.Lambda<Func<T, bool>>(be, pe);
}
2 голосов
/ 13 мая 2009

Метод должен быть объявлен как универсальный (MakeFilter<T>):

public static Expression<Func<T, bool>> MakeFilter<T>(string prop, object val)

Иначе, как еще вызывающая сторона сможет указать, что такое T?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...