Как передать лямбда-параметры Linq в SwitchExpression и получить выражение <Func <T, object >> в Lambda .Where (...) - PullRequest
0 голосов
/ 27 октября 2018

C # Как передать лямбда-параметры Linq в SwitchExpression и вернуть выражение в .Where (...) Lambda Linq Queryable

Я пишу лямбда-запрос linq, которому я хочу использовать Func, который объявляет SwitchExpression в этом иИспользуйте On, где (p => ...) в этом коде используйте предикат, это выглядит так:

модель:

public class FieldValue
    {
        public virtual int Id { get; set; }
        public virtual string Value { get; set; }
        public virtual int FieldId_fk { get; set; }
        public virtual int TAdvertiesId_fk { get; set; }
    }

var predicateItemTest = LinqKit.PredicateBuilder.True<FieldValue>().And(x => x.FieldId_fk == 2); //2 is digit for test
SwitchCase[] cases = new SwitchCase[] {
new SwitchCase[] { Expression.SwitchCase(Expression.Constant(predicateItemTest), Expression.Constant(2, typeof(int))) } 
};

SwitchExpression _SwitchExpression = Expression.Switch(Value, Expression.Constant(LinqKit.PredicateBuilder.False<FieldValue>()), //Default Value
 cases);

SwitchCase_Predicate = Expression.Lambda<Func<int, Expression<Func<FieldValue, bool>>>>(_SwitchExpression, Value).Compile();

1) Первый тест:

var FilterResult = _FieldValue.Table.Where(p=>SwitchCase_Predicate(p.FieldId_fk).Compile()).ToList();

когда вызываете этот метод и кому я хочу передать параметр SwitchCase_Predicate (...), он имеет ошибку, потому что тип возвращаемого значения является выражением и не должен передавать динамические параметры.если использовать, как описано ниже, сработало, но не разрешить передать параметр в .where (...):

2) Второй тест:

var FilterResult = _FieldValue.Table.Where(SwitchCase_Predicate(2).Compile()).ToList();

как передать параметр в where (...)например «Первый тест» и возвращаемый предикат выражения для правильного использования в .where (...)

Пожалуйста, помогите решить эту проблему.

...