2

我已经提取了代码库的相关部分来说明。我真的坚持一些可能很简单的事情。

对于信息,在数据库中 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);

无论如何这是可能的,这对我来说非常重要。

4

2 回答 2

5

改用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));
于 2013-09-11T13:14:59.850 回答
1

在这种特殊情况下,Contains方法(如@MarcinJuraszek 的回答)是要走的路。

但是,如果你需要混合搭配Ands和Ors,你可以这样做:

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);

(从这里抬起)

于 2013-09-11T13:22:35.580 回答