簡體   English   中英

使用來自 Web API 的多個輸入參數查詢 EF DB

[英]Querying EF DB using multiple input parameters from Web API

我有一個帶有多個輸入參數的簡單 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);

這是我被困住的地方。 如何將所有謂詞組合在一起:謂詞1、2、3、4?

我用谷歌搜索,發現有 Expression.OrElse 但不確定如何正確使用它,它只接受 2 個謂詞。 我以為我可以這樣使用它:

var total = Expression.OrElse(predicate1, predicate2);
total = Expression.OrElse(total, predicate3);
total = Expression.OrElse(total, predicate4);

但它不起作用。

你可以這樣做:

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;

var body = Expression.Or(predicate1.Body, predicate2.Body);
var lambda = Expression.Lambda<Func<A, bool>>(body, predicate2.Parameters[0]);

body = Expression.Or(lambda.Body, predicate3.Body);
lambda = Expression.Lambda<Func<A, bool>>(body, predicate3.Parameters[0]);

body = Expression.Or(lambda.Body, predicate4.Body);
var finalExpression = Expression.Lambda<Func<A, bool>>(body, predicate4.Parameters[0]);

您可以將finalExpression傳遞給過濾器。

如果您想使用And而不是Or ,只需將Or方法替換為And

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM