【发布时间】:2022-01-23 02:06:33
【问题描述】:
我有一个带有多个输入参数的简单 Web API 操作:
MethorA(string val1, string val2, int val3, int val4){}
多个参数可以是可选的:
MethorA(string val1, string val2 = null, int val3 = null, int val4 = null){}
我使用这些参数作为一个复杂的表达式来使用 EF 查询数据库。
所以我构建了几个子表达式,如下所示:
Expression<Func<A, bool>> predicate1 = x=> x.f1 ==val1;
Expression<Func<A, bool>> predicate2 = x=> x.f2 ==val2;
Expression<Func<A, bool>> predicate3 = x=> x.f3 ==val3;
Expression<Func<A, bool>> predicate4 = x=> x.f4 ==val4;
现在我需要构建一个谓词,我可以将它传递给我的数据访问层,它接受如下内容:
context.Entity.FilterBy(Expression<Func, bool> predicate);
这是我被困住的地方。如何将所有谓词组合在一起:predicate1,2,3,4?
我用谷歌搜索,发现有 Expression.OrElse 但不确定如何正确使用它,它只接受 2 个谓词。我以为我可以这样使用它:
var total = Expression.OrElse(predicate1, predicate2);
total = Expression.OrElse(total, predicate3);
total = Expression.OrElse(total, predicate4);
但它不起作用。
【问题讨论】:
-
我正在链接另一个答案而不是标记为重复,因为我不知道这是否真的解决了问题,但是您是否考虑过谓词生成器? stackoverflow.com/questions/51720429/…
-
你希望它们是 And 还是 Or?
标签: c# asp.net-core .net-core