LINQ to Objects - Does Not Contain?

16,188

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)
Share:
16,188
Nick
Author by

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, 2022

Comments

  • Nick
    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?