LINQ to Objects - не содержит? - PullRequest
       13

LINQ to Objects - не содержит?

2 голосов
/ 11 июня 2009

У меня есть коллекция Предметов, у каждого из которых есть коллекция Отношений. У меня есть список групп, с которыми у предметов могут быть отношения.

Я могу найти все предметы, которые имеют определенные отношения, но теперь я хочу найти все предметы, которые не имеют отношения ни с одной из моих групп.

Я могу найти Предметы, имеющие отношение к любой из Групп, выполнив следующее:

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

Как мне найти все предметы, которые не связаны ни с одной из групп?

Ответы [ 5 ]

6 голосов
/ 11 июня 2009

Я не очень хорошо помню VB, но простое "Не" должно работать.

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
6 голосов
/ 11 июня 2009

Вы пытались отрицать результаты метода Contains?

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
2 голосов
/ 28 июня 2009
Dim notHasGroup = items.Except(haveGroup)
2 голосов
/ 11 июня 2009

Если вы все равно генерируете коллекцию haveGroup, вы можете просто сделать что-то вроде этого:

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
0 голосов
/ 16 мая 2016
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
...