如何使用具有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));

如何使用具有OR值的动态EF查询

.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());