Динамическая Линк / Лямбда-фильтрация - PullRequest
0 голосов
/ 12 мая 2011

У меня есть метод, который возвращает выражение, которое будет использоваться для динамической фильтрации записей на основе потребностей клиентов, у меня возникла проблема с этим, я хочу что-то вроде этого

     public Expression<T> FilterCreator<T>(FilterCondition condition, string columnName, object value)
    {

        Expression<Func<Customer, bool>> query;

        // FilterCondition is an enum flag for conditions
        if(condition.Condition == ConditionFlags.EQUALS)
        {
            // here is the problem,
            // i want the emailAddress to be dynamic based on the passed columName parameter of the client 
            // and be able to cast its type of the value that was passed
            query = p => p.EmailAddress == (typeof(p.EmailAddress))value;

           //i want something like this
           // query = p => p.(columnName)=> (typeOf(p.(columnName)))value;

        }
        else if(condition.Condition == ConditionFlags.CONTAINS)
        {
             .....
        } 

        return query;

    }

кто-нибудь посоветует, ребята? заранее спасибо

1 Ответ

2 голосов
/ 12 мая 2011

Вам нужно построить дерево выражений:

var param = Expression.Parameter<Customer>();
p = Expression.LambdaFunc<Customer, bool>(
    Expression.Call(typeof(object), "Equals", null, //non-generic
                    Expression.Property(param, columnName),
                    Expresssion.Constant(value)
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...