带有"NOT IN"的c#谓词生成器功能
本文关键字:quot 功能 谓词 NOT IN 带有 | 更新日期: 2023-09-27 18:06:28
使用PredicateBuilder如何获得类似于SQL IN或NOT IN查询的功能?
例如,我有一个id列表,我想选择id匹配或不匹配的所有People。
人员匹配功能相当简单(尽管可能有更好的方法)
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不在personIDs列表中的所有人员。
Ask De Morgan:
NOT (p OR Q) = (NOT p) AND (NOT Q)
要让你的代码生成相当于NOT IN的条件,重写为
var predicate = PredicateBuilder.True<Person>()
和
predicate = predicate.And(e=>e.PersonID != temp);
你使用实体框架吗?
那么你可以不使用PredicateBuilder来构建查询:
var personIds = new List<int>() { 8,9,10 };
var query = persons.Where(it => !personIds.Contains(it.PersonId));
从这个LINQ语句创建一个SQL NOT IN查询
这是你想要的吗?
var predicate = PredicateBuilder.True<Person>()
foreach (int i in personIDs)
{
int temp = i;
predicate = predicate.And(e => e.PersonID != temp);
}
return persons.Where(predicate);
不用看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);