У меня есть строковая коллекция имен для входа. Я создаю строку фильтра для поиска ldap и метода GetFilter. Как еще можно реорганизовать метод GetFilter. Может быть другой способ создать строку фильтра?
List<string> logins = new List<string> {"211C69C4-D0FA-4CB5-91E5-B6B109B3F784", "311C69C4-D0FA-4CB5-91E5-B6B109B3F784"}
Получить метод фильтрации:
public string GetFilter(IEnumerable<string> logins)
{
var result = string.Join("(loginName=", logins.Select(x => (x + ")")));
return string.Format("(|(loginName={0})", result);
}
Строка фильтра результатов:
string filter = "(|(loginName=211C69C4-D0FA-4CB5-91E5-B6B109B3F784)(loginName=311C69C4-D0FA-4CB5-91E5-B6B109B3F784))";
Вы можете создать GetFilter как:
public string GetFilter(IEnumerable<string> logins)
{
return string.Format("(|{0})",
string.Concat(logins.Select(x => string.Format("(loginName={0})", x))));
}
Я реализовал новую версию:
public string Get(string filterName, List<string> filterValues)
{
var concatFilter = string.Join("", GetItems(filterName, filterValues));
return string.Format("(|{0})", concatFilter);
}
private IEnumerable<string> GetItems(string filterName, IEnumerable<string> filterValues)
{
return filterValues.Select(filterValue => Get(filterName, filterValue));
}
public string Get(string filterName, string filterValue)
{
return string.Format("({0}={1})", filterName, filterValue);
}