1

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(...) 中正确使用

请帮助解决这个问题。

4

0 回答 0