LINQ 其中语句与 OR 连接

本文关键字:OR 连接 语句 LINQ | 更新日期: 2023-09-27 18:33:32

通常可以在可查询对象中连接多个"Where"语句,并且通过在"Where"语句中的表达式之间使用AND逻辑过滤结果。

如何使用 OR 逻辑连接"位置"语句?像这样:

query.OrWhere(t => true).OrWhere(t => false)

我正在尝试通过循环有条件地创建查询。

for (var i = 0; i < 15; i++)
{
   switch(i)
   {
      case 0:
      { 
           if (something happens)
           {
                query = query.OrWhere(t => t.columnDependingOnIndex is something);
           }
           break;
      }
      //and so on ...
   }
}

LINQ 其中语句与 OR 连接

Jut 在一个 Where 语句中使用 or(||)

query.Where(somePredicate || someOtherPredicate)

另一种方法是仅使用 .联盟-

var q1 = query.Where(somePredicate)
var q2 = query.Where(someOtherPredicate)
var res = q1.Union(q2)
好吧,

你不能,但你可以连接两个查询并获得不同的结果它应该如下

        List<Point> Points = new List<Point>();
        var statementOne = Points.Where(d => d.X > 3);
        var statementTwo = Points.Where(d => d.X < 0);
        var queriedPoints = statementOne.Concat(statementTwo).Distinct();

你在找query.Where(t => true || false)吗?

一些示例代码:

        var someInts = new List<int>
        {
            1,2,3,4,5,6,6,7
        };
        someInts.Where(i => i == 5 || i == 6);

或者,您可以创建一个查询对象,其中包含向下解析列表的所有函数(下面是一些自包含的代码:

namespace LinqPlayground
{
    class Program
    {
        static void Main(string[] args)
        {
            var someInts = new List<int>
            {
                1,2,3,4,5,6,6,7
            };
            var queryObjectPattern = new QueryObjectPattern<int>();
            queryObjectPattern.AddOr(i => i == 5);
            queryObjectPattern.AddOr(i => i == 7);
            var intsThatPassed = queryObjectPattern.GetItemsUsingOrClauses(someInts);
            foreach (var i in intsThatPassed)
            {
                Console.WriteLine("{0} passed!", i);    
            }
        }
        public class QueryObjectPattern<T>
        {
            private readonly List<Func<T, bool>> _funcsToApply;
            public QueryObjectPattern()
            {
                _funcsToApply =  new List<Func<T, bool>>();
            }
            public void AddOr(Func<T, bool> orClause)
            {
                _funcsToApply.Add(orClause);
            }
            public IEnumerable<T> GetItemsUsingOrClauses(IEnumerable<T> items)
            {
                var itemsThatPassed = new List<T>();
                foreach (var func in _funcsToApply)
                {
                    itemsThatPassed.AddRange(items.Where(func));
                }
                return itemsThatPassed;
            }
        }
    }
}