Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用动态OR语句构建Linq查询?_C#_Linq_Entity Framework - Fatal编程技术网

C# 如何使用动态OR语句构建Linq查询?

C# 如何使用动态OR语句构建Linq查询?,c#,linq,entity-framework,C#,Linq,Entity Framework,以下代码: 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(); 将允许我使用和表

以下代码:

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查询


但是,假设我想做同样的事情,只使用表达式的动态列表?

您根本不需要循环:

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);
Func谓词=user=>false;
foreach(项目中的var项目)
{
var predicateCopy=谓词;
predicate=user=>predicateCopy(user)| | someOtherCondition;
}
返回query.Where(谓词);
这将导致相当深的堆栈(一个代理调用另一个代理,等等)。如果特定情况允许您使用任何,那么这通常是一种更好的方法


我希望
Any
在大多数情况下都能正常工作,因为在这些情况下,您有一个项目集合可以与。。。非任何方法适用于“在某些情况下,任何超过18岁的人都可以……在某些情况下,任何姓氏以“G”开头的人“是适当的,等等。

虽然这确实回答了这个特定的场景,但有没有更通用的方法?这是我最初的想法,但它给了我一个stackoverflow异常,就好像谓词调用自己而不是前面的一样Func@sternr:嗯,是的-等一下,修理。。。完成。现在,它将为循环的每个迭代捕获不同的变量。嗯,这没有给出一个例外,但它不起作用——它忽略了someOtherCondition@stern:它不应该。。。你能举一个简短但完整的例子来说明这一点吗?