如何将动态EF查询与OR值一起使用。我希望这次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));
答案 0 :(得分:1)
.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());