簡體   English   中英

PredicateBuilder的程序化where子句

[英]programmatic where in clause for PredicateBuilder

我已經提取了代碼庫的相關部分進行說明。 我真的停留在可能簡單的事情上。

對於信息,在數據庫中,p和entity1之間存在一對多關系。

predicate = PredicateBuilder.False<myType>();

.....

predicate = predicate.And(p => p.entity1.FirstOrDefault().id == 1 || p.entity1.FirstOrDefault().id == 2);

我真正需要的是以編程方式執行(p.entity1.FirstOrDefault()。id == 1 || p.entity1.FirstOrDefault()。id == 2)

例如下面

List<int> listOfId = new List<int>(){1,2,3,4,5,6,7,8,9};

predicate = predicate.And(p => p.entity1.id.wherein(listOfid);

反正有可能嗎,這對我來說很關鍵。

改為使用Contains

List<int> listOfId = new List<int>(){1,2,3,4,5,6,7,8,9};

predicate = predicate.And(p => listOfid.Contains(p.entity1.id));

在這種特殊情況下, Contains方法(如@MarcinJuraszek的回答)是可行的方法。

但是,如果您需要混合和匹配And s和Or s,則可以執行以下操作:

predicate = PredicateBuilder.True<myType>();
//other clauses
.....
List<int> listOfId = new List<int>(){1,2,3,4,5,6,7,8,9};
var orClause = PredicateBuilder.True<MyType>();

foreach (var id in listOfId)
{
  orClause = orClause.Or(p => p.entity1.FirstOrDefault().id == id);
}

predicate = predicate.And(orClause);

(從這里舉起)

暫無
暫無

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

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