C# 如何将 Linq Lambda 参数传递给 SwitchExpression 并将表达式返回到 .Where(...) Lambda Linq Queryable
我编写了一个 linq Lambda 查询,我想在此代码中使用声明 SwitchExpression 的 Func 并在此代码中使用 where(p=>...) 使用 predicat ,就像这样:
型号是:
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(...) 中传递参数,如“First Test”,并返回表达式谓词以在 .where(...) 中正确使用
请帮助解决这个问题。