Linq to AD Query无法正常工作

时间:2011-09-20 14:17:07

标签: vb.net linq linq-to-entities active-directory linq-to-objects

user.fld_usr_name是一个值为随机名称

的字符串

user是作为参数

提供的对象
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

我已经尝试了一切

2 个答案:

答案 0 :(得分:0)

我进入了该插件的源代码。

LINQ就像用c#一样不能像vb.net那样工作。 该插件是C#代码,但这无关紧要。很奇怪。

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

我使用共享属性来加载我的所有用户并使用它。 如果有人知道如何修复此错误,请告诉我

答案 1 :(得分:0)

另一个想法是,活动目录对“用户”或“组”的定义非常宽松。例如,与团体;您有安全组和通讯组。但AD可能实现为具有安全组,授权组,通讯组,位置组等等。然后,您的IT部门可能会设置它以便OU表示矩阵组等等。但是当你告诉AD给你带回一个安全组列表时,它会带你回到使用安全组类型创建它的一切。

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

因为它可能适用于您,您的linq查询可能会返回zilch,因为Name字段实际上对于该集合为null。出于这个原因,我现在只使用GUID或Native GUID。如果你只有一个名字,那么使用搜索器和抓取guid,然后使用这些guid创建一个目录条目,它将包含你正在寻找的信息。