通常可以连接多个"其中" Queryable中的语句,结果通过在" Where"的表达式之间使用AND逻辑进行过滤。语句。
如何连接" Where"使用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 ...
}
}
答案 0 :(得分:3)
在一个Where语句中使用或(||)
query.Where(somePredicate || someOtherPredicate)
另一种方法是使用.Union -
var q1 = query.Where(somePredicate)
var q2 = query.Where(someOtherPredicate)
var res = q1.Union(q2)
答案 1 :(得分:0)
您在寻找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;
}
}
}
}
答案 2 :(得分:0)
嗯,你可以,但你可以连接两个查询并获得不同的结果 它应该如下
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();