Для начала мой фильтр: < /p>
Код: Выделить всё
(startswith(userprincipalname,'xyz105766')) OR
(startswith(userprincipalname,'xyz111380')) OR
(startswith(userprincipalname,'xyz123220')) OR
(startswith(userprincipalname,'xyz160852')) OR
(startswith(userprincipalname,'xyz197308')) OR
(startswith(userprincipalname,'xyz265002')) OR
(startswith(userprincipalname,'xyz283506')) OR
(startswith(userprincipalname,'xyz309288')) OR
(startswith(userprincipalname,'xyz312202')) OR
(startswith(userprincipalname,'xyz337328'))
Я попробовал следующее:
Код: Выделить всё
var membersList = new List(); // Custom Class
var filters = CreateQueryFilter(list);
var batchRequest = new BatchRequestContentCollection(graphClient);
var batchIds = new List();
int cnt = 0;
foreach (string filter in filters)
{
var requestInfo = graphClient.Users
.ToGetRequestInformation(config => {GetGraphOptions(filter, null); });
batchRequest = new BatchRequestContentCollection(graphClient);
var requestId = await batchRequest.AddBatchRequestStepAsync(requestInfo);
batchIds.Add(requestId);
cnt++;
}
var response = await graphClient.Batch.PostAsync(batchRequest);
// Process each response
foreach (var id in batchIds)
{
var callResult = await response.GetResponseByIdAsync(id);
if (callResult != null && callResult.Value != null)
{
// seems callResult.Value is always 100
matchedUsers.ForEach(s => {
var member = new EntraUser(s);
membersList.Add(member);
});
}
batchIds.Clear();
< /code>
Частное статическое действие getGraphoptions (String Filter, String Search) < /p>
{
return (requestConfiguraturation) => < /p>
{
requestConfiguration.QueryParameters.Count = true; // this is needed with the consistancy level since not every user has extended properties
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual"); // without this you will get the Property 'extensionAttribute ?' does not exist as a declared property or extension property
requestConfiguration.QueryParameters.Select = [.. GetEntraProperties()];
requestConfiguration.QueryParameters.Orderby = ["displayName asc"];
if (filter != null)
{
requestConfiguration.QueryParameters.Filter = filter;
}
if (search != null)
{
requestConfiguration.QueryParameters.Search = search;
}
};
< /code>
} < /p>
public list createqueryfilter (list filter) < /p>
{< /p>
List result = new List();
if (filter is null || filter.Count == 0)
return result;
int iter = 10;
for (int i = 0; i < filter.Count; i += iter)
{
var limitedList = filter.Skip(i).Take(iter);
result.Add(SearchToString(
EntraSearchText.JoinCondition.OR,
[new(limitedList, [EntraSearchText.FilterUpnString], EntraSearchText.JoinCondition.OR)]
));
}
return result;
Подробнее здесь: https://stackoverflow.com/questions/796 ... every-time