将LINQ中的多个where子句连接为OR而不是AND

15 c# linq

无论如何加入LINQ的条款是OR吗?

var ints = new [] { 1, 3, 5, 7 };

var query = from i in ints select i;

query = query.Where (q => q == 3);

query = query..Where (q => q == 7);
Run Code Online (Sandbox Code Playgroud)

我想要的是能够动态添加where子句但是使用OR而不是AND

Tj *_*lie 14

如果你想继续使用强类型的Linq查询,你应该研究LinqKit和谓词构建.我已经将它用于类似的东西,并发现它与And/Or堆叠过滤器配合得很好.

有关更多深入信息,请查看Nutshell摘录中C#4.0/3.0.这是我的代码中的一个片段:

        //Setup the initial predicate obj then stack on others:
        basePredicate = basePredicate.And(p => false);
        var predicate1 = PredicateBuilder.True<Person>();

        foreach (SearchParms parm in parms)
        {
            switch (parm.field)
            {
                case "firstname":
                    predicate1 = predicate1.And(p => p.FirstName.Trim().ToLower().Contains(sValue));
                    break;
                //etc...
            }

        }
        //Run a switch based on your and/or parm value to determine stacking:
        if (Parm.isAnd) {
             basePredicate = basePredicate.And(predicate1);
        } else {
             basePredicate = basePredicate.Or(predicate1);
        }
Run Code Online (Sandbox Code Playgroud)