2009-06-11 1 views
2

У меня есть коллекция предметов, каждая из которых имеет коллекцию отношений. У меня есть список групп, с которыми элементы могут иметь отношения.LINQ to Objects - не содержит?

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

я могу найти элементы, которые имеют отношения с какой-либо из групп, делая это:

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 

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

+0

Вы не просто хотите, чтобы отрицать, где положение? –

+0

Да, он делает. – mquander

ответ

6

Я не помню 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 
+0

Спасибо, это место на. :) – Nick

6

Вы пробовали отрицать результаты метода 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 
+1

Этот ответ неверен. Это соответствует всем элементам, которые имеют одно или несколько отношений, которые не совпадают, в отличие от всех элементов, которые не имеют соответствующих отношений. – Thorarin

+0

Это было то, что я изначально пытался, но, как правильно указывает Торарин, он возвратил все элементы в исходной группе, а не исключал тех, у кого есть какие-либо совпадения. – Nick

2

Если вы генерировании 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 
2
Dim notHasGroup = items.Except(haveGroup) 
0
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 
+0

Можете ли вы, пожалуйста, добавить объяснение в свой ответ? –

 Смежные вопросы

  • Нет связанных вопросов^_^