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 (...)
Пожалуйста, помогите решить эту проблему.