搜索过滤器空间无法识别

时间:2018-03-09 11:46:22

标签: c# microsoft-graph

我传入的搜索过滤器中包含一个空格的类别。如果没有空格,它会返回正确的结果。

因此,如果将Person2作为Person 2传递给下方,那么它会给出错误的结果:

string filter =
    String.Format("\"category <> 'Person' AND category <> 'Person2', subject: testsubject\"");

List<QueryOption> options = new List<QueryOption>
{
    new QueryOption("$search", filter)
};

var messages = graphClient.Me
    .MailFolders
    .Inbox
    .Messages
    .Request(options)
    .Select("id, Categories, Subject")
    .Top(500)
    .GetAsync()
    .Result;

1 个答案:

答案 0 :(得分:1)

使用Keyword Query Language (KQL)$search查询参数。根据{{​​3}},短语需要加双引号:

  

自由文本KQL查询不区分大小写,但运算符必须为大写。您可以使用以下一个或多个作为自由文本表达式构建KQL查询:

     
      
  • (包括一个或多个没有空格或标点符号的字符)

  •   
  • 词组(包含两个或多个词,用空格分隔;但是,这些词必须用双引号括起来)

  •   

尝试用双引号括起您的类别字符串:

string filter = "\"category <> \\\"Person\\\" AND category <> \\\"Person 2\\\", subject: testsubject\""

请注意,为了通过API发送报价,需要对其进行转义(\")。为了让C#包含字符串中的转义序列,必须转义转义字符(\\ + \")。这就是为什么你最终得到奇怪的三重斜杠(\\\")。