ホームページ >バックエンド開発 >C++ >LINQ の Join メソッドと GroupJoin メソッドの違いは何ですか?

LINQ の Join メソッドと GroupJoin メソッドの違いは何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-22 12:37:10180ブラウズ

What's the Difference Between LINQ's Join and GroupJoin Methods?

LINQ to Entities の Join と GroupJoin の比較

GroupJoin について

GroupJoin は、Join と同様、複数のデータ ソースを結合するための LINQ メソッドです。ただし、GroupJoin では、Join とは異なる構造の結果が生成されます。

参加:

  • 内部結合を実行し、結合された両方のテーブルに一致する行のみを生成します。
  • 結果: 両方のテーブルの列を含む結合されたテーブル。

グループ参加:

  • 外部結合を実行して、最初のテーブルの行と 2 番目のテーブルの行を照合します。
  • 結果: グループのコレクション。各グループには、最初のテーブルの行と、それに一致する 2 番目のテーブルの行 (一致するものが存在しない場合は空のリスト) が含まれます。

文法

クエリ構文:

参加:

<code>from p in Parent
join c in Child on p.Id equals c.Id
select new { p.Value, c.ChildValue }</code>

グループ参加:

<code>from p in Parent
join c in Child on p.Id equals c.Id into g
select new { Parent = p, Children = g }</code>

メソッド構文 (あまり一般的ではありません):

参加:

<code>Parent.Join(Child, p => p.Id, c => c.Id, (p, c) => new { p.Value, c.ChildValue })</code>

グループ参加:

<code>Parent.GroupJoin(Child, p => p.Id, c => c.Id, (p, c) => new { Parent = p, Children = c })</code>

ユースケース

1. フラットな外部接続を生成します:

  • GroupJoin を使用すると、2 番目のテーブルに一致する行がない場合でも、最初のテーブルのすべての行を含むフラット化された外部結合を作成できます。これは、グループをフラット化することで実現されます:
<code>from p in Parent
join c in Child on p.Id equals c.Id into g
from c in g.DefaultIfEmpty()
select new { Parent = p.Value, Child = c?.ChildValue }</code>

2. 順序を維持します:

  • 結合を使用すると、要素の順序を維持しながらリストをフィルタリングできます。外部シーケンスを最初のリストとして使用すると、2 番目のリストの要素の順序を維持できます:
<code>from id in ids
join p in parents on id equals p.Id
select p</code>

以上がLINQ の Join メソッドと GroupJoin メソッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。