以下代码:
var dynamicQuery = from a in _context.Users select a;
string[] args = new string[] { "aa", "bb", "cc" };
foreach (string word in args)
dynamicQuery = dynamicQuery.Where(x => x.Name.Contains(word));
return dynamicQuery.ToList();
将允许我创建一个包含动态列表的 Linq 查询AND表达式。
但假设我想做同样的事情,只是使用一个动态列表OR表达式?
你根本不需要循环:
return _context.Users.Where(x => args.Any(word => x.Name.Contains(word)));
编辑:更一般地,您可以使用:
Func<User, bool> predicate = user => false;
foreach (var item in items)
{
var predicateCopy = predicate;
predicate = user => predicateCopy(user) || someOtherCondition;
}
return query.Where(predicate);
这最终会产生相当深的堆栈(一个委托调用另一个委托调用另一个委托等等)。具体情况允许的地方使用Any
,这通常是更好的方法。
我希望Any
在大多数情况下,您有一组项目可能会与...非-Any
方法适用于“在某些情况下,任何超过 18 岁的人都可以......在某些情况下,姓氏以“G”开头的任何人都适用,等等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)