[解決済み] LINQ を使用して、ある List<> にある項目を別の List<> にない項目として取得する。
2022-03-15 15:25:53
質問
LINQクエリで簡単にできると思うのですが、方法がよくわかりません。
このコード片を考えると
class Program
{
static void Main(string[] args)
{
List<Person> peopleList1 = new List<Person>();
peopleList1.Add(new Person() { ID = 1 });
peopleList1.Add(new Person() { ID = 2 });
peopleList1.Add(new Person() { ID = 3 });
List<Person> peopleList2 = new List<Person>();
peopleList2.Add(new Person() { ID = 1 });
peopleList2.Add(new Person() { ID = 2 });
peopleList2.Add(new Person() { ID = 3 });
peopleList2.Add(new Person() { ID = 4 });
peopleList2.Add(new Person() { ID = 5 });
}
}
class Person
{
public int ID { get; set; }
}
に含まれるすべての人々を得るためにLINQクエリを実行したいと思います。
peopleList2
に含まれないもので、かつ
peopleList1
.
この例では、2人の人物(ID = 4 & ID = 5)を得ることができるはずです。
どのように解決するのですか?
これは、以下のLINQ式を用いて対処することができます。
var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));
LINQで表現する方法もあり、より読みやすいと感じる開発者もいるようです。
var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));
警告 コメントで指摘されているように、これらのアプローチでは O(n*m) の演算が必要です。それはそれでいいのかもしれませんが、パフォーマンス上の問題が発生する可能性があり、特にデータセットが非常に大きい場合は注意が必要です。もし、これで性能要件を満たせない場合は、他のオプションを評価する必要があるかもしれません。しかし、LINQで解決することが要求されているため、ここではそのようなオプションは検討しません。いつものように、あなたのプロジェクトが要求する性能に対して、どのようなアプローチも評価してください。
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】あるリストの項目を別のリストで削除する
-
[解決済み】Listで明確な値のリストを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】Linq 構文 - 複数列の選択