【发布时间】:2013-01-16 12:16:51
【问题描述】:
如何根据用户选择的操作以编程方式执行 SearchFilter 逻辑运算符AND 和OR??
如果用户给"[To]ContainsSubstring'Ram' OR [To]containssubstring'lak'这样的选择如何执行?
【问题讨论】:
标签: c# exchangewebservices ews-managed-api
如何根据用户选择的操作以编程方式执行 SearchFilter 逻辑运算符AND 和OR??
如果用户给"[To]ContainsSubstring'Ram' OR [To]containssubstring'lak'这样的选择如何执行?
【问题讨论】:
标签: c# exchangewebservices ews-managed-api
您可以将各个过滤器定义为表达式,然后根据用户的选择组合它们。
编辑:我提议的是创建谓词(我理解现在已弃用,建议使用基本相同的 Func),然后将它们组合成一个表达式并将其应用于您必须被过滤掉。
我在这里找到的一个例子:Combine Multiple Predicates
我过去所做的是根据用户的选择组合谓词,然后将它们编译成一个表达式,然后将其用作 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());
【讨论】: