Хорошо, поэтому после некоторых проб и ошибок мне удалось воспроизвести разрешение неоднозначных имен, используя синтаксис фильтра.Это не точное совпадение, потому что не все атрибуты доступны для поиска, но я думаю, что это нужно сделать.
Вот мой вспомогательный класс, который я создал для задания.
public static class QueryHelper
{
public static string GenerateAnrFilter(string query)
{
if (string.IsNullOrEmpty(query))
return query;
var tokens = query.Split(' ');
var filterClauses = new List<string>();
if (tokens.Count() > 1)
{
var otherTokens = string.Join(" ", tokens.Skip(1));
string nameFilter1 = $"({generateFilterClause(tokens[0], "givenName")} and {generateFilterClause(otherTokens, "surname")})";
filterClauses.Add(nameFilter1);
string nameFilter2 = $"({generateFilterClause(otherTokens, "givenName")} and {generateFilterClause(tokens[0], "surname")})";
filterClauses.Add(nameFilter2);
filterClauses.Add(generateFilterClause(query, "displayName"));
//filterClauses.Add(generateFilterClause(query, "officeLocation")); // not supported for filter
filterClauses.Add(generateMultiValueFilterClause(query, "proxyAddresses"));
filterClauses.Add(generateFilterClause(query, "userPrincipalName"));
//filterClauses.Add(generateFilterClause(query, "onPremisesSamAccountName")); // not supported for filter
filterClauses.Add(generateFilterClause(query, "mail"));
filterClauses.Add(generateFilterClause(query, "mailNickName"));
}
else
{
filterClauses.Add(generateFilterClause(query, "displayName"));
filterClauses.Add(generateFilterClause(query, "givenName"));
filterClauses.Add(generateFilterClause(query, "surname"));
//filterClauses.Add(generateFilterClause(query, "officeLocation")); // not supported for filter
filterClauses.Add(generateMultiValueFilterClause(query, "proxyAddresses"));
filterClauses.Add(generateFilterClause(query, "userPrincipalName"));
//filterClauses.Add(generateFilterClause(query, "onPremisesSamAccountName")); // not suported for filter
filterClauses.Add(generateFilterClause(query, "mail"));
filterClauses.Add(generateFilterClause(query, "mailNickName"));
}
var fullQuery = string.Join(" or ", filterClauses);
return fullQuery;
}
private static string generateMultiValueFilterClause(string query, string attributeName)
{
return $"{attributeName}/any(a:startswith(a,'{query}'))";
}
private static string generateFilterClause(string query, string attributeName)
{
return $"startsWith({attributeName},'{query}')";
}
}