0

user.fld_usr_name是一个值为随机名称LINQ到AD查询不工作

用户的字符串是作为参数

ByVal user As GUser 

这一个对象被LINQ查询一点不工作

Dim result = (From usr In users Where usr.Name.Contains(user.fld_usr_name) Select usr).ToList() 

这是工作

Dim result = (From usr In users Where usr.Name.Contains("random name") Select usr).ToList() 
的一个

这是错误

Object reference not set to an instance of an object. 

我用这中的LINQ到Active Directory库

这可能意味着它的LINQ到实体

我用尽了一切

+0

您是否尝试过在该行设置断点,并查看'user.fld_usr_name'是否为空? – ebb

+0

它是“随机名称”,是否有可能的空白字符是不同的...(我开始探索2小时的挫折后的每一个可能性) – BBQ

回答

0

我去了到该插件的源代码中。

LINQ只是没有像使用c#一样使用vb.net。 该插件是C#代码,但这应该不重要。很奇怪。

我忘记了具体细节,因为它已经有一段时间了,但它必须做一些事实,它通过属性作为参考而不是价值。或者它必须是一个静态的事实...如果我知道我会修复它

我用一个共享属性来加载我的所有用户,并与之合作。 如果有人知道如何解决这个问题,请告诉我

0

另一个想法是活动目录对“用户”或“组”的定义非常松散。例如,与团体;你有安全组和通讯组。但是AD可能被实现为具有安全组,授权组,分发组,位置组等等。最重要的是,您的IT部门可能会设置它以便OU代表矩阵组等。但是,当您告诉AD将您带回安全组列表时,它会将您使用安全组类型创建它的所有事件带回您手中。

现在,如果您从另一个方向备份并查看它,您会发现并非所有“用户”实际上都是用户。有些使用不同,因此没有使用“名称”属性。我碰到过几次这样的情况,我把这些连接钻入了一个我认为合适的OU中,然后尝试将这个OU中的所有名称都带回来。如果该字段没有被实际使用,它将会返回为空,并将您的应用程序吹起来。 AD设计很差吗?通常。许多组织习惯于创建用户或组来完成任务,而不是以实际代表组织的方式进行。例如,创建一个仅由Web应用程序使用的用户帐户,或创建新的组,以包含少数特殊人员的一些权限,例如前面所述。当然,这个问题是,当你编写应用程序时,你试图从数据库的角度来看待它。但它不是一个数据库;它只是一个集合的集合。非标准化,动态的平面文件。 :(

因此,它可能适用于你,你的linq查询可能会返回zilch,因为名称字段实际上为该集合为null。正因为如此,我现在只使用GUID或本机GUID。如果你只有一个名字,那么使用搜索器并抓取GUID,然后使用这些GUID创建一个目录条目,它将提供你正在查找的信息。