我遇到如下问题:
var customers = from c in ctx.Customers;
从UI动态地,我可以传递过滤器列表 场景1.“和”
groupOp = "AND"
filter 1: where c.ID == 1
filter 2: where c.Name == 'XYZ'
我需要的是一种结合方式 所以最终的结果是:
var filterList = from c in ctx.Customers
where c.ID == 1
&& c.Name == 'XYZ'
场景2.“或”
同样的问题
var customers =来自ctx.Customers中的c;
从UI动态地,我可以传递过滤器列表
groupOp = "OR"
filter 1: where c.Name == 'ABC'
filter 2: where c.Name == 'XYZ'
我需要的是一种结合方式 所以最终的结果是:
var filterList = from c in ctx.Customers
where c.Name == 'ABC'
|| c.Name == 'XYZ'
如何将IQueryable与AND或OR动态组合。目前我没有要求将AND和OR组合在一起,所以它只是AND或OR。 任何帮助总是非常感谢...
答案 0 :(得分:2)
使用PredicateBuilder,即
var predicate = PredicateBuilder.False<Customer>();
foreach (var filter in filters)
{
predicate = predicate.Or(filter);
}
return ctx.Customers.Where(predicate);
如果您不想在代码中手动手动构建所有过滤器表达式,则可以从使用字符串中的Dynamic Linq库构建表达式中受益。