将Linq查询与AND或Ors组合

时间:2013-01-28 16:05:57

标签: linq expression-trees

我遇到如下问题:

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。 任何帮助总是非常感谢...

1 个答案:

答案 0 :(得分:2)

使用PredicateBuilder,即

var predicate = PredicateBuilder.False<Customer>();
foreach (var filter in filters)
{
    predicate = predicate.Or(filter);
}
return ctx.Customers.Where(predicate);

如果您不想在代码中手动手动构建所有过滤器表达式,则可以从使用字符串中的Dynamic Linq库构建表达式中受益。