私はLINQクエリ(または同じことを達成するための他の効率的な手段)にこだわっています。あるリストのすべてのアイテムを、別のリストにないアイテムを選択する方法を教えてもらえますか?
基本的に、他の2つのリスト間でアイテムを一致させて作成したリストがあります。最初のリストで一致するものが見つからなかったすべてのアイテムを見つける必要があります。誰かがこの目標を達成するクエリで下の2番目のLINQクエリの星を埋めることができますか? TSQLを使用していた場合、SELECT * NOT IN ()
を実行しますが、LINQで許可されていないと思います。
//Create some sample lists.
List<IdentifierLookupData> list1 = new List<IdentifierLookupData> { /*Init */ };
List<IdentifierLookupData> list2 = new List<IdentifierLookupData> { /*Init */ };
//Find all items in list1 and list2 that match and store them in joinItems.
var joinItems = (from d1 in list1
join d2 in list2 on d1 equals d2
select d1).ToList<IdentiferLookupData>();
//Find all items in list1 not in joinItems.
var deletedItems = (from d1 in list1
***select all items not found in joinItems list.***
これを試して:
var List2 = OriginalList.Where(item => !List1.Any(item2 => item2.ID == item.ID));
最も簡単な方法は、Except
メソッドを使用することです。
var deletedItems = list1.Except(joinItems);
これは、joinItems
に含まれていないlist1
のアイテムのセットを返します