2009-06-11 93 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

你不就是想否定where子句? – 2009-06-11 16:51:48

+0

是的,他的確如此。 – mquander 2009-06-11 16:52:16

回答

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 
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 2009-06-11 18:11:01

+0

這是我最初試過的,但正如Thorarin指出的那樣,它返回了原始組中的所有項目,而不是排除那些包含任何匹配的項目。 – Nick 2009-06-12 07:11:49

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