1. ホーム
  2. c#

[解決済み] LINQを使用してList<T>から要素を削除する

2022-02-11 17:05:06

質問

例えば、次のようなLINQクエリを持っているとします。

var authors = from x in authorsList
              where x.firstname == "Bob"
              select x;

ということを考えると authorsList は型 List<Author> を削除するにはどうすればよいのでしょうか? Author 要素から authorsList を、クエリによって返された authors ?

別の言い方をすれば、Bobと等しいファーストネームをすべて authorsList ?

注:これは質問の目的のために簡略化した例です。

どのように解決するのですか?

まあ、そもそも除外してしまえば簡単なんですけどね。

authorsList = authorsList.Where(x => x.FirstName != "Bob").ToList();

しかし、これでは authorsList 前のコレクションから著者を削除するのではなく、前のコレクションから著者を削除します。別の方法として RemoveAll :

authorsList.RemoveAll(x => x.FirstName == "Bob");

どうしても他のコレクションをベースにする必要がある場合は、HashSet、RemoveAll、Containsを使いますね。

var setToRemove = new HashSet<Author>(authors);
authorsList.RemoveAll(x => setToRemove.Contains(x));