我想知道是否可以使用N .Where()
子句以编程方式创建单个LINQ查询(对于EntityFramework 6),但在这些.Where()
子句之间使用OR。
想象一下IQueryable对象定义如下:
var query = dbContext.MyTable.Where(mt => mt.TimeStamp >= DateBegin);
我需要的是添加N(未知数量)的Where子句,但它们之间有OR条件。
某个对象的图片列表:
List<MyObject> myObj =
new List<MyObject>({new MyObject {val = "a" }, new MyObject { val = "b"}}); //In real code there is more than 1 property.
然后我想添加Where()子句来查询:
myObj.ForEach(mo =>{
// THIS CREATES -AND- BETWEEN WHERE CLAUSES, BUT I NEED -OR-
query.Where(q=>q.MyValue == mo.val); // In real code there is more than 1 property to compare
});
我在考虑查询之间的.Union()
,但它可以在分离的查询之间生成联合,而且我认为这不是最优的。
谢谢!
答案 0 :(得分:1)
以下是解决方案:linq-to-entities-combining-predicates
或者当然需要使用“最新”答案:
复制/粘贴class ParameterRebinder
复制/粘贴static class Utility
用法:
Expression<Func<Car, bool>> theCarIsRed = c => c.Color == "Red";
Expression<Func<Car, bool>> theCarIsCheap = c => c.Price < 10.0;
Expression<Func<Car, bool>> theCarIsRedOrCheap = theCarIsRed.Or(theCarIsCheap);
var query = carQuery.Where(theCarIsRedOrCheap);
因为在我的解决方案中有N个表达式,我先取表达式,然后在ForEach循环中附加其他表达式。
var firstExpression = expressionList.First();
expressionList.Skip(1).ToList().ForEach(ex => { firstExpression = firstExpression.Or(ex); });