【问题标题】:SearchFilter Logical Operators AND and OrSearchFilter 逻辑运算符 AND 和 Or
【发布时间】:2013-01-16 12:16:51
【问题描述】:

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

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

【问题讨论】:

    标签: c# exchangewebservices ews-managed-api


    【解决方案1】:

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


    编辑:我提议的是创建谓词(我理解现在已弃用,建议使用基本相同的 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());
    

    【讨论】:

    • 谢谢你的回复 dutzu。你能给我任何例子吗。
    • 感谢您的回复 dutzu。我们如何根据发送和接收的日期时间过滤公共文件夹中的项目??我试过这个 `filter = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeSent, "28/08 /12 6:34:06 PM");'...但产生错误。错误-指定的值对属性无效...我以正确的格式指定了值。
    • @user1891567 在比较日期时间时你不能依赖字符串,我希望你那里的逻辑首先解析你发送给 DateTime 的字符串,然后比较两者
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多