如何使用具有OR值的动态EF查询
本文关键字:动态 EF 查询 OR 何使用 | 更新日期: 2023-09-27 18:26:37
如何使用具有OR值的动态EF查询。这次我想把PeopleGroups
3或4的所有人都干掉,但下次可能是PeopleGroups
5或8
这部作品是硬编码的。PeopleGroups
不是主Id
var Peoples = db.People.Where(_ => (_.PeopleGroups == 3 || _.PeopleGroups == 4));
但是如何让它充满活力呢?我想到了.Contains()
,但它只适用于主Id
。我认为
var searchPeopleGroups = new List<int> { 3, 4 };
var Peoples = db.People.Where(_ => searchPeopleGroups.Contains(_.PeopleGroups));
.Contains()
方法将起作用,并且应该在生成的SQL查询中生成一个IN子句。
如果您想要一个真正的动态解决方案,在生成的SQL查询中生成OR语句,我建议使用LinqKit框架以及附带的PredicateBuilder
类。
如果您包含LinqKit,您的查询可能会变成类似于:
Expression<Func<People, bool>> predicate = PredicateBuilder.False<People>();
foreach (var g in searchPeopleGroups)
{
predicate = predicate.Or(p => p.PeopleGroups == g);
}
var Peoples = db.People.AsExpandable().Where(predicate.Expand());