LinqToLdap查询多个命名上下文

本文关键字:上下文 查询 LinqToLdap | 更新日期: 2023-09-27 18:12:32

我使用LinqToLdap。我已经成功地从一个命名上下文中搜索用户(即,这是AD中的特定OU)。我想做的是添加另一个namingContext,并能够同时查询它们。

你知道我该怎么做吗?

我已经做了以下操作,但没有成功-它总是针对第一个映射进行搜索。

var config = new LdapConfiguration();

config.AddMapping(new UserMap1(), "namingContext1 - OU etc etc");
config.AddMapping(new UserMap2(), "namingContext2 - OU etc etc");
public class UserMap1: ClassMap<User>
public class UserMap2: ClassMap<User>

我的查询如下-

using (var context = new LinqToLdap.DirectoryContext(conn, true, config))
            {
                var query =
                    context.Query<User>()
                        .Where(x => searchTextAsArray.Contains(x.GivenName) || searchTextAsArray.Contains(x.Sn))
                        .Select(u => new
                        {
                            u.GivenName,
                            u.Sn,
                            u.DistinguishedName,
                            u.Cn,
                            u.UserPrincipalName,
                            Score = (searchTextAsArray.Contains(u.GivenName) ? 1 : 0) + (searchTextAsArray.Contains(u.Sn) ? 1 : 0)
                        }).ToList();

                var results = query.OrderByDescending(u => u.Score).ThenBy(u => u.Sn).ThenBy(u => u.GivenName);

                foreach (var result in results)
                {
                    Console.WriteLine("{0} {1} - {2}",
                        result.GivenName,
                        result.Sn,
                        result.Score);
                }
            }

它只考虑了第一个映射…

LinqToLdap查询多个命名上下文

LDAP是基于目录的。您必须移动到更高的共享节点或发出两个单独的查询。