2012-01-23 12 views
6

2つの配列idxListResponse &が同じ構造を持っています。#linq - 別の配列に存在しない配列から要素を取得します。

これらのアレイの各々は、この配列の各要素は、データフィールドと呼ばれる別の配列であるそのうちの一つの特性の数を有する

INDEXDATA呼ば子アレイで一方が異なる特性を有する要素の数を含んでいます。これにはいくつかのキー値ペアのプロパティがあります。

本質的に私は3つの別々の配列の階層を持っています。

私は階層の第1レベル+第3レベルのアイテムが一致しない第2レベルのすべての要素を取得しようとしています。つまり、第3レベルのアイテムが一致する第2レベル。

私はこれに数多くのアプローチを試みてきましたが、今のところ私はどこにも行きません。だれでも助けてくれます。

はFYI - ここに私の最新の試み

var q = idxListResponse.Index.Where(a => 
    a.IndexData.All(b => 
     b.DataField.All(c => 
      _index.Index.Where(z => 
       z.IndexData.All(y => y.DataField.Contains(c.name)) 
      ) 
     ) 
    ) 
); 

答えて

23

Exceptはそれを行うための良い方法ですだ:

var items = source1.Except(source2); 

source2のものを除いてsource1内のすべての項目を返します。

あなたのコレクションは、異なるタイプのように見えるので、あなたのようなものだろう:

source1.Except(source2.Select(s => /* selector here */)) 

をそれとも、IEqualityComparerの独自の実装を作成して、二つの異なるタイプを比較することを使用することができます。

+0

ありがとうございます。問題は、3番目の配列の要素の1つのプロパティが一致した場合、それが落ちているように見えるということです。私はそれが削除する前に、対応するエントリに一致するように3番目の配列の各要素のすべてのプロパティが必要 – Johnv2020

関連する問題