我传入的搜索过滤器中包含一个空格的类别。如果没有空格,它会返回正确的结果。
因此,如果将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;
答案 0 :(得分:1)
使用Keyword Query Language (KQL)的$search
查询参数。根据{{3}},短语需要加双引号:
自由文本KQL查询不区分大小写,但运算符必须为大写。您可以使用以下一个或多个作为自由文本表达式构建KQL查询:
字(包括一个或多个没有空格或标点符号的字符)
词组(包含两个或多个词,用空格分隔;但是,这些词必须用双引号括起来)
尝试用双引号括起您的类别字符串:
string filter = "\"category <> \\\"Person\\\" AND category <> \\\"Person 2\\\", subject: testsubject\""
请注意,为了通过API发送报价,需要对其进行转义(\"
)。为了让C#包含字符串中的转义序列,必须转义转义字符(\\
+ \"
)。这就是为什么你最终得到奇怪的三重斜杠(\\\"
)。