使用PredicateBuilder,我如何获得类似于SQL IN或NOT IN查询的功能?
例如,我有一个ID列表,我想选择其ID匹配或与ID不匹配的所有人。
人员匹配功能相当简单(尽管可能有更好的方法)
var predicate = PredicateBuilder.False<Person>()
foreach (int i in personIDs)
{
int temp = i;
predicate = predicate.Or(e=>e.PersonID == temp);
}
return persons.Where(predicate);
那我该怎么做呢?我想要所有ID不在personID列表中的人。
答案 0 :(得分:3)
NOT(P OR Q)=(NOT P)AND(NOT Q)
要使代码生成等效的NOT IN条件,请重写为
var predicate = PredicateBuilder.True<Person>()
和
predicate = predicate.And(e=>e.PersonID != temp);
答案 1 :(得分:3)
您使用实体框架吗?
然后您可以在不使用PredicateBuilder的情况下构建查询:
var personIds = new List<int>() { 8,9,10 };
var query = persons.Where(it => !personIds.Contains(it.PersonId));
从这条LINQ语句中创建一个SQL NOT IN查询。
答案 2 :(得分:0)
这是你想要的吗?
var predicate = PredicateBuilder.True<Person>()
foreach (int i in personIDs)
{
int temp = i;
predicate = predicate.And(e => e.PersonID != temp);
}
return persons.Where(predicate);
答案 3 :(得分:0)
不看api ....
var predicate = PredicateBuilder.True<Person>()
foreach (int i in personIDs)
{
int temp = i;
predicate = predicate.And(e=>e.PersonID != temp);
}
return persons.Where(predicate);