0

如何根据用户选择的操作执行 SearchFilter 逻辑运算符ANDOR编程?

如果用户给出这样的选择"[To]ContainsSubstring'Ram' OR [To]containssubstring'lak' 如何执行呢?

4

1 回答 1

0

您可以将单个过滤器定义为表达式,然后根据用户的选择组合它们。


编辑:我提议的是创建谓词(据我所知,现在已弃用,建议使用基本相同的 Func),然后将它们组合成一个表达式并将其应用于您必须过滤的列表。

我在这里找到的一个例子:组合多个谓词


我过去所做的是根据用户的选择组合谓词,然后将它们编译成一个表达式,然后将其用作 Linq Where 扩展方法的参数。

所以,一个例子(不确定它是否会编译现在写它:):

List<Customer> list = new List<Customer>();
List<Func<Customer,bool>> predicateList = new List<Func<Customer,bool>>();

if(/*user choice condition*/)
{
    predicateList.Add(c => c.Name.Contains("test"));
}
if (/*user choice condition*/)
{
    predicateList.Add(c => c.Name.Contains("test") || c.Description.Contains("buyer"));
}
//etc.


Expression<Func<IWorkItem, bool>> filterExpression = c => whereClausePredicates.All(pred => pred(c));
var filteredCustomers = list.Where(filterExpression.Compile());
于 2013-01-16T12:18:14.947 回答