LINQ to Objects - Does Not Contain?
Solution 1
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
Solution 2
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
Solution 3
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
Solution 4
Dim notHasGroup = items.Except(haveGroup)
Nick
I'm a web-application developer for an IT managed services company. I run a small team building ASP.NET applications in C# and VB.Net.
Updated on June 04, 2022Comments
-
Nick almost 2 years
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?