2009-06-11 3 views
2

私はそれぞれがリレーションシップのコレクションを持っているアイテムのコレクションを持っています。私はアイテムが関係を持つことができるグループのリストを持っています。オブジェクトへのLINQ - 含まれない?

私は特定の関係を持つすべてのアイテムを見つけることができますが、私は今、私のグループとの関係を持たないアイテムをすべて見つけたいと思っています。

私はこれを行うことにより、グループのいずれかと関係を持っているアイテムを見つけることができます。

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句を否定したくないですか? –

+0

はい、彼はそうです。 – mquander

答えて

6

私はVBをうまく覚えていませんが、単純な "Not"がうまくいくはずです。

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

この回答は間違っています。一致するリレーションシップを持たないすべてのアイテムではなく、1つ以上のリレーションシップが一致するすべてのアイテムに一致します。 – Thorarin

+0

これは当初の試みでしたが、Thorarinが正確に指摘しているように、一致するものを除外するのではなく、元のグループのすべてのアイテムを返しました。 – 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

あなたはあなたの答えに説明を加えてもよろしいですか? –

関連する問題