1

我有一个问题,如下图所示:

var customers = from c in ctx.Customers;

从 UI 动态地,我可以传递过滤器列表 场景 1。“AND”

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 = from c in ctx.Customers;

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

4

1 回答 1

2

使用PredicateBuilder,即

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

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

于 2013-01-28T16:11:18.080 回答