Vb.net Linq到AD查询不工作

Vb.net Linq到AD查询不工作,vb.net,linq,linq-to-entities,active-directory,linq-to-objects,Vb.net,Linq,Linq To Entities,Active Directory,Linq To Objects,user.fld_usr_name是一个值为random name的字符串 用户是作为参数给定的对象 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("

user.fld_usr_name是一个值为random name的字符串

用户是作为参数给定的对象

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


我已经尝试了所有的方法

我进入了该插件的源代码

LINQ在vb.net和c#中的工作方式不同。 该插件是C代码,但这不重要。很奇怪

我已经忘记了细节,因为它已经有一段时间了,但是它必须做一些事情,因为它将属性作为引用而不是值传递。或者它必须是一个静态的。。。如果我知道我会修好的

我使用了一个共享属性来加载我的所有用户并使用它。
如果有人知道如何修复此错误,请告诉我另一个想法是active directory对“用户”或“组”的定义非常松散。例如,与团队合作;您有安全组和通讯组。但是AD可能被实现为具有安全组、授权组、通讯组、位置组等功能。然后,您的IT部门可能会将其设置为使OU表示矩阵组等等。但当您告诉AD为您带回一个安全组列表时,它将为您带回使用安全组类型创建它的所有内容

现在,如果你回过头来从另一个方向看,你会发现并非所有的“用户”实际上都是用户。有些使用方式不同,因此没有使用“名称”属性。我曾几次遇到过这样的情况,我将连接钻取到一个我认为合适的OU中,然后尝试恢复该OU中的所有名称。如果该字段没有实际使用,它将返回为null并使应用程序崩溃。这是糟糕的广告设计吗?通常许多组织都养成了创建用户或组来完成任务的习惯,而不是以实际代表组织的方式来完成任务。例如,创建一个仅由web应用程序使用的用户帐户,或者创建新组只是为了包含一些特殊人员的权限,如我前面所述。当然,问题在于,在编写应用程序时,您试图从数据库的角度来看待它。但它不是一个数据库;它只是一个集合。非标准的、动态的平面文件:(


因此,正如它可能适用于您一样,您的linq查询可能会返回zilch,因为该集合的名称字段实际上为空。正是因为这个原因,我现在只使用GUID或本机GUID。如果您只有一个名称,则使用searcher和grab GUID,然后使用这些GUID创建一个包含该信息的目录条目您正在查找。

您是否尝试在行中设置断点,并查看
user.fld\u usr\u name
是否为空?它是“随机名称”,是否可能空格字符不同…(经过两个小时的挫折后,我开始探索各种可能性)