我有一个包含许多对象的列表,其定义如下:
Public Class Helper
Public Property UserPrincipal As UserPrincipal
Public Property Groups As New List(Of String)
Public Property Server As New List(Of String)
End Class
假设有一个对象长这样:
UserPrincipal.Name = Jan
Groups = {group_1, group_2, group_3}
Server = {Server1}
还有一个:
UserPrincipal.Name = Jan
Groups = {group_1, group_3}
Server = {Server2}
现在,我想检查每个对象的属性“Groups”,如果一个对象的“Groups”包含另一个对象的“Groups”,则创建一个新对象。
因此,新的对象列表应该像这样:
UserPrincipal.Name = Jan
Groups = {group_1, group_2, group_3}
Server = {Server1, Server2}
这是否可以使用linq来实现?
谢谢和问候, Jan
更新:10:42:将'Server'属性的类型从字符串更改为列表(of字符串)
更新12:04:让我试着澄清我的问题。 任务是收集服务器本地组的成员。为此,我使用具有正确凭据的新principalcontext连接到每个服务器,获取正确的组(它是远程桌面用户组),并获取此组的所有成员。 有了这些信息,我填充了提到的“helper”对象,其中包含userprincipal(它是该组的成员)、组(它们是远程桌面用户组的成员)和服务器名称。
因此,我得到n * Helper对象,其中n是服务器计数。
现在,有两个要求:假设我在这里有两个服务器,server1和server2。一切都相等,但服务器名称不同,因此我只想要一个属性为Server = {server1,server2}的对象。
第二个要求基本上与第一个相同,但是:如果Groups属性至少包含一个唯一相关项,并且如果它尚未包含在其中,则将此组添加到列表中。
不知道现在是否更清楚了:)现在将展示一个简短的示例。
对象1: UserPrincipal.Name = Jan Groups = {Domain-Users} Server = {Server1}
对象2: UserPrincipal.Name = Jan Groups = {Domain-Users} Server = {Server2}
预期对象: UserPrincipal.Name = Jan Groups = {Domain-Users} Server = {Server1,Server2}
示例2: 对象1: UserPrincipal.Name = Jan Groups = {Domain-Users,Test-Users} Server = {Server1}
对象2: UserPrincipal.Name = Jan Groups = {Test-Users} Server = {Server2}
预期对象: UserPrincipal.Name = Jan Groups = {Domain-Users,Test-Users} Server = {Server1,Server2}
最后一个,呼: 对象1: UserPrincpial.Name = Jan Groups = {Test-Users} Server = {Server1}
对象2: UserPrincipal.Name = Jan Groups = {Domain-Users} Server = {Server1}或{Server2}等无所谓。
预期结果:没有更改,因为属性组完全不同。
UserPrincipal
是如何相关的?同一组也有相同的UserPrincipal
吗?或者你想保留哪个组,第一个? - Tim SchmelterGroups
和Server
属性只是针对每个UserPrincipal
进行联合。但是,您的描述听起来像是某种交集。您能否请澄清一下? - Enigmativityx.group.First().UserPrincipal
。你没有提到规则,所以我使用了“First”。 - Tim Schmelter