使用join方法重构创建Ldap搜索过滤器

时间:2014-11-11 13:00:03

标签: c# ldap refactoring

我有登录名的字符串集合。我为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))";

2 个答案:

答案 0 :(得分:0)

您可以将GetFilter创建为:

public string GetFilter(IEnumerable<string> logins)
{
    return string.Format("(|{0})", 
           string.Concat(logins.Select(x => string.Format("(loginName={0})", x))));
}

答案 1 :(得分:0)

我实施了新版本:

    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);
    }