LINQ 中的單一查詢多字段連接
在 LINQ 中執行連線操作時,通常需要同時連接多個欄位上的資料表。雖然可以使用 where
子句為連接添加其他約束,但這並非總是最高效或最易讀的方法。
為了在單一連接中連接多個字段,可以使用匿名類型。例如,以下程式碼根據 field1
和 field2
欄位連接 entity
和 entity2
表:
<code class="language-csharp">var result = from x in entity join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 } select new { x, y }; // 选择结果</code>
在此範例中,匿名類型 new { x.field1, x.field2 }
和 new { y.field1, y.field2 }
用於建立一個新類型,該類型僅包含用於連接的欄位。然後使用 equals
運算子比較這些類型的值以執行連接。 最後,select new {x, y}
語句選擇連接後的結果,包含來自 entity
和 entity2
的資料。
需要注意的是,匿名類型中使用的欄位必須相容,這意味著它們必須具有相同的類型,並且如果任一欄位可為空,則必須可為空。如果字段不相容,則會引發異常。
雖然這種方法適用於等值連接,但可以透過使用自訂相等比較器或使用其他連接子句來執行更複雜的連接。例如,以下程式碼使用自訂相等比較器對 entity
和 entity2
表執行非等值連接:
<code class="language-csharp">var result = from x in entity join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 } into gj from y in gj.DefaultIfEmpty() where y == null || y.field3 == x.field4 select new { x, y }; // 选择结果</code>
在此範例中,自訂相等比較器用於比較 field3
和 field4
欄位的值。如果值不相等,則仍將執行連接,但 y
的值將為 null。
透過了解如何使用匿名類型和自訂相等比較器,您可以使用 LINQ 執行各種連接,包括多個欄位上的連接。 記住選擇最終結果以獲取連接後的數據。
以上是如何在單一 LINQ 查詢中執行多字段聯結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!