我已经提取了代码库的相关部分来说明。我真的陷入了一些可能很简单的事情。
有关信息,在数据库中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);
无论如何这是可能的,这对我来说非常关键。
答案 0 :(得分: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));
答案 1 :(得分:1)
在这种特殊情况下,Contains
方法(如@ MarcinJuraszek的答案)是可行的方法。
但是,如果您需要混合搭配And
和Or
,则可以执行以下操作:
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);
(取自here)