将 Microsoft.Office.Interop.Outlook.Items.Find 与过滤器一起使用,可以包含引号和撇号

Use Microsoft.Office.Interop.Outlook.Items.Find with filter, that could contain quotation marks and apostrophes

我在使用以下过滤器时遇到问题。

string filter = String.Format(
   "[Start] = '{0}' AND [Subject] = '{1}' AND [BillingInformation] = 'Test'", 
   time.ToShortDateString() + " " + time.ToShortTimeString(), subject);
return items.Find(filter) as Microsoft.Office.Interop.Outlook.AppointmentItem;

我希望能够查找项目,即使我的主题包含两个引号 and/or 撇号。我试过:

string filter = string.Format(
   "[Start] = \"{0}\" AND [Subject] = \"{1}\" AND [BillingInformation] = \"Test\"", 
   string.Concat(time.ToShortDateString(), " ", time.ToShortTimeString()), 
   subject);
return items.Find(filter) as Microsoft.Office.Interop.Outlook.AppointmentItem;

不幸的是,这会破坏我的引号。而且我什至不确定,如果这现在适用于撇号......它似乎有效。

我该如何定义过滤器,以便我的主题都可以使用引号和撇号?

经过几天尝试解决这个问题:

这是最终的解决方案,对我来说效果很好:

string filter = String.Format(
    "[Start] = '{0}' AND [Subject] = '{1}' AND [BillingInformation] = 'Test'", 
    time.ToShortDateString() + " " + time.ToShortTimeString(),
    subject.Replace("'", "''"));
return items.Find(filter) as Microsoft.Office.Interop.Outlook.AppointmentItem;

这会很好用。你必须使用单引号两次。

不间断空格还有另一个小问题。当您添加 ror 尝试在 outlook 中查找约会时,请确保没有任何不间断的空格。在添加或过滤项目时删除它们。只是我对有类似问题的人的小建议。