使用带有过滤器的Microsoft.Office.Interop.Outlook.Items.Find,它可能包含引号和撇号

时间:2015-10-16 07:14:40

标签: c# office-interop

我遇到以下过滤器的问题。

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;

我希望能够查找项目,即使我的主题同时包含引号和/或撇号。我尝试过:

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;

不幸的是,这会破坏我的引号。而且我甚至不确定,如果现在可以使用撇号......它似乎可以工作。

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

1 个答案:

答案 0 :(得分:0)

几天后试图解决这个问题:

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

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中查找约会时,请确保没有任何非破坏空格。添加或过滤项目时删除它们。对于有类似问题的人来说,这是我的小建议。