Reputation: 4223
I have a collection of Items that each have a collection of Relationships. I have a list of Groups that Items can have Relationships with.
I can find all the Items that have a particular relationship but I now want to find all the Items that don't have a Relationship with any of my Groups.
I can find the Items that have a relationship with any of the Groups by doing this:
Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
Dim haveGroup = (From item In items _
Where item.Relationships.Any(Function(r) groupIds.Contains(r.TargetID)) _
Select item).ToList
How can I find all the items that do not have a relationship with any of the groups?
Upvotes: 2
Views: 16986
Reputation: 101
Dim listIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
Dim haveGroup = (From item In items _
Where Not listIds.Contains(item.ID)
Select item.ID).ToList
Upvotes: 0
Reputation: 269498
If you're generating the haveGroup
collection anyway then you could just do something like this:
Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
Dim haveGroup = (From item In items _
Where item.Relationships.Any(Function(r) groupIds.Contains(r.TargetID)) _
Select item).ToList
Dim haveNotGroup = items.Except(haveGroup).ToList
Upvotes: 2
Reputation: 156624
I don't remember VB all that well, but a simple "Not" should work.
Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
Dim haveGroup = (From item In items _
Where Not item.Relationships.Any(Function(r) groupIds.Contains(r.TargetID)) _
Select item).ToList
Upvotes: 6
Reputation: 351566
Have you tried negating the results of the Contains
method?
Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
Dim haveGroup = (From item In items _
Where item.Relationships.Any(Function(r) Not groupIds.Contains(r.TargetID)) _
Select item).ToList
Upvotes: 6