Microsoft graph api 使用Microsoft Graph筛选两个扩展属性

Microsoft graph api 使用Microsoft Graph筛选两个扩展属性,microsoft-graph-api,extended-properties,Microsoft Graph Api,Extended Properties,我的某些日历事件具有两个扩展属性: // Extended Properties var extendedProperties = new EventSingleValueExtendedPropertiesCollectionPage(); extendedProperties.Add(new SingleValueLegacyExtendedProperty { Id = _Property_TruckleSoft1, Value = oSettings.CalendarEn

我的某些日历事件具有两个扩展属性:

// Extended Properties
var extendedProperties = new EventSingleValueExtendedPropertiesCollectionPage();
extendedProperties.Add(new SingleValueLegacyExtendedProperty
{
    Id = _Property_TruckleSoft1,
    Value = oSettings.CalendarEntryType
});

if(!string.IsNullOrEmpty(oSettings.ScheduleType))
{
    extendedProperties.Add(new SingleValueLegacyExtendedProperty
    {
        Id = _Property_TruckleSoft2,
        Value = oSettings.ScheduleType
    });
}
在其他代码中,我要筛选这些事件:

string strFilterProperty = $"singleValueExtendedProperties/Any(ep: ep/id eq '{eventTypeTag}' and ep/value eq '{oData.Settings.CalendarEntryType}')";

string strFilterProperty = $"singleValueExtendedProperties/Any(ep: ep/id eq '{scheduleTypeTag}' and ep/value eq '{oData.Settings.ScheduleType}')";
那么,如何筛选同时具有上述扩展属性的事件呢?

这个答案确实很有帮助。我把事情复杂化了

因此:

公共异步任务DeleteExistingEvents(字符串idCalendar、DateTime dateStart、DateTime dateEnd、字符串typeEvent、字符串typeSchedule=”“)
{
尝试
{
//我们只希望事件在所需的日期范围内
string strFilterDateRange=string.Format(“start/dateTime ge'{0}T00:00'和end/dateTime le'{1}T23:59',
dateStart.ToString(“yyyy-MM-dd”),
dateEnd.ToString(“yyyy-MM-dd”);
//我们只想要正确类型的事件
字符串strFilterProperty=$“singleValueExtendedProperties/Any(ep:ep/id eq'{U Property\U TruckleSoft1}'和ep/value eq'{typeEvent}')”;
字符串strFilter=strFilterDateRange+”和“+strFilterProperty;
如果(键入时间表!=“”)
{
strFilterProperty=$“singleValueExtendedProperties/Any(ep:ep/id eq'{U Property\U TruckleSoft2}'和ep/value eq'{typeSchedule}')”;
strFilter+=”和“+strFilterProperty;
}
//选择事件(如果有)并删除它们
var oEvents=等待图形客户端
我
.日历[idCalendar]
.事件
.Request()
.过滤器(strFilter)
.GetAsync();
如果(oEvents?.Count>0)
{
foreach(事件oEvents中的事件oEvent)
{
//删除事件(我是否需要使用特定日历事件列表?)
wait _graphClient.Me.Events[oEvent.Id].Request().deleteSync();
}
}
}
捕获(例外情况除外)
{
SimpleLog.Log(ex);
返回false;
}
返回true;
}

关键是简单地使用
并将两个单独的过滤器缝合在一起。

需要更多的解释。不清楚您的问题是什么。我想筛选具有两个扩展属性的事件。没有太多可处理的内容,其中一个有效,而另一个无效吗?你收到的是错误信息还是什么?@marclafler-MSFT我补充了一点解释。“这有帮助吗?”马尔克拉夫勒·MSFT解决了这个问题。
public async Task<bool> DeleteExistingEvents(string idCalendar, DateTime dateStart, DateTime dateEnd, string typeEvent, string typeSchedule = "")
{
    try
    {
        // We only want events within the desired date range
        string strFilterDateRange = String.Format("start/dateTime ge '{0}T00:00' and end/dateTime le '{1}T23:59'",
            dateStart.ToString("yyyy-MM-dd"),
            dateEnd.ToString("yyyy-MM-dd"));

        // We only want events of the right type
        string strFilterProperty = $"singleValueExtendedProperties/Any(ep: ep/id eq '{_Property_TruckleSoft1}' and ep/value eq '{typeEvent}')";

        string strFilter = strFilterDateRange + " and " + strFilterProperty;

        if(typeSchedule != "")
        {
            strFilterProperty = $"singleValueExtendedProperties/Any(ep: ep/id eq '{_Property_TruckleSoft2}' and ep/value eq '{typeSchedule}')";
            strFilter += " and " + strFilterProperty;
        }

        // Select the events (if any) and delete them
        var oEvents = await _graphClient
                                .Me
                                .Calendars[idCalendar]
                                .Events
                                .Request()
                                .Filter(strFilter)
                                .GetAsync();
        if (oEvents?.Count > 0)
        {
            foreach (Event oEvent in oEvents)
            {
                // Delete the event (Do I need to use the specific calendar events list?)
                await _graphClient.Me.Events[oEvent.Id].Request().DeleteAsync();
            }
        }
    }
    catch (Exception ex)
    {
        SimpleLog.Log(ex);
        return false;
    }

    return true;
}