如何使用动态OR语句构建LINQ查询?

wnavrhmk  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(118)

代码如下:

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

字符串
将允许我使用AND表达式的动态列表创建LINQ查询。
但是假设我想做同样的事情,只是用一个动态的OR表达式列表?

e5njpo68

e5njpo681#

你根本不需要循环:

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”开头的人都可以,等等。

相关问题