首頁 >後端開發 >C++ >LINQ 的 Join 和 GroupJoin 方法有什麼不同?

LINQ 的 Join 和 GroupJoin 方法有什麼不同?

Barbara Streisand
Barbara Streisand原創
2025-01-22 12:37:10177瀏覽

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

LINQ to Entities 中 Join 與 GroupJoin 的比較

理解 GroupJoin

GroupJoin 與 Join 一樣,是用來組合多個資料來源的 LINQ 方法。但是,GroupJoin 產生的結果結構與 Join 不同。

Join:

  • 執行內連接,僅產生兩個連接表中都存在匹配項的行。
  • 結果:一個合併表,包含兩個表的欄位。

GroupJoin:

  • 執行外連接,將第一個表中的行與第二個表中的行配對。
  • 結果:一個組的集合,其中每個組包含來自第一個表的一行及其與第二個表中匹配的行(如果不存在匹配項,則為空列表)。

文法

查詢語法:

Join:

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

GroupJoin:

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

方法語法(不太常用):

Join:

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

GroupJoin:

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

使用案例

1. 產生扁平化外連接:

  • GroupJoin 可用於建立扁平化外連接,其中包含第一個表中的每一行,即使第二個表中沒有匹配行。這是透過展平組來實現的:
<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. 保持順序:

  • Join 可用來篩選列表,同時保持元素的順序。透過使用外部序列作為第一個列表,可以保持來自第二個列表的元素的順序:
<code>from id in ids
join p in parents on id equals p.Id
select p</code>

以上是LINQ 的 Join 和 GroupJoin 方法有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn