亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言

c#查詢關(guān)鍵字之join 子句運(yùn)用方法

時(shí)間:2024-07-01 15:18:40 C語言 我要投稿
  • 相關(guān)推薦

c#查詢關(guān)鍵字之join 子句運(yùn)用方法

  引導(dǎo)語:c#是第一個(gè)面向組件的編程語言,其源碼會(huì)編譯成msil再運(yùn)行。以下是小編整理的c#查詢關(guān)鍵字之join 子句運(yùn)用方法,歡迎參考閱讀!

  使用 join 子句可以將來自不同源序列并且在對象模型中沒有直接關(guān)系的元素相關(guān)聯(lián)。唯一的要求是每個(gè)源中的元素需要共享某個(gè)可以進(jìn)行比較以判斷是否相等的值。例如,食品經(jīng)銷商可能具有某種產(chǎn)品的供應(yīng)商列表以及買主列表。例如,可以使用 join 子句創(chuàng)建該產(chǎn)品同一指定地區(qū)供應(yīng)商和買主的列表。

  join 子句接受兩個(gè)源序列作為輸入。每個(gè)序列中的元素都必須是可以與另一個(gè)序列中的相應(yīng)屬性進(jìn)行比較的屬性,或者包含一個(gè)這樣的屬性。join 子句使用特殊的 equals 關(guān)鍵字比較指定的鍵是否相等。join 子句執(zhí)行的所有聯(lián)接都是同等聯(lián)接。join 子句的輸出形式取決于所執(zhí)行的聯(lián)接的具體類型。以下是三種最常見的聯(lián)接類型:

  內(nèi)部聯(lián)接

  下面的示例演示一個(gè)簡單的內(nèi)部同等聯(lián)接。此查詢產(chǎn)生一個(gè)“產(chǎn)品名稱/類別”對平面序列。同一類別字符串將出現(xiàn)在多個(gè)元素中。如果 categories 中的某個(gè)元素不具有匹配的 products,則該類別不會(huì)出現(xiàn)在結(jié)果中。

  C#

  var innerJoinQuery =

  from category in categories

  join prod in products on category.ID equals prod.CategoryID

  select new { ProductName = prod.Name, Category = category.Name }; //produces flat sequence

  分組聯(lián)接

  含有 into 表達(dá)式的 join 子句稱為分組聯(lián)接。

  C#

  var innerGroupJoinQuery =

  from category in categories

  join prod in products on category.ID equals prod.CategoryID into prodGroup

  select new { CategoryName = category.Name, Products = prodGroup };

  分組聯(lián)接會(huì)產(chǎn)生一個(gè)分層的結(jié)果序列,該序列將左側(cè)源序列中的元素與右側(cè)源序列中的一個(gè)或多個(gè)匹配元素相關(guān)聯(lián)。分組聯(lián)接沒有等效的關(guān)系術(shù)語;它本質(zhì)上是一個(gè)對象數(shù)組序列。

  如果在右側(cè)源序列中找不到與左側(cè)源中的元素相匹配的元素,則 join 子句會(huì)為該項(xiàng)產(chǎn)生一個(gè)空數(shù)組。因此,分組聯(lián)接基本上仍然是一種內(nèi)部同等聯(lián)接,區(qū)別只在于分組聯(lián)接將結(jié)果序列組織為多個(gè)組。

  如果您只選擇分組聯(lián)接的結(jié)果,則可以訪問各個(gè)項(xiàng),但無法識(shí)別結(jié)果所匹配的鍵。因此,通常更為有用的做法是選擇分組聯(lián)接的結(jié)果并放入一個(gè)也具有該鍵名的新類型中,如上一個(gè)示例所示。

  當(dāng)然,還可以將分組聯(lián)接的結(jié)果用作其他子查詢的生成器:

  C#

  var innerGroupJoinQuery2 =

  from category in categories

  join prod in products on category.ID equals prod.CategoryID into prodGroup

  from prod2 in prodGroup

  where prod2.UnitPrice > 2.50M

  select prod2;

  左外部聯(lián)接

  在左外部聯(lián)接中,將返回左側(cè)源序列中的所有元素,即使它們在右側(cè)序列中沒有匹配的元素也是如此。若要在 LINQ 中執(zhí)行左外部聯(lián)接,請將 DefaultIfEmpty 方法與分組聯(lián)接結(jié)合起來,以指定要在某個(gè)左側(cè)元素不具有匹配元素時(shí)產(chǎn)生的默認(rèn)右側(cè)元素?梢允褂 null 作為任何引用類型的默認(rèn)值,也可以指定用戶定義的默認(rèn)類型。下面的示例演示了用戶定義的默認(rèn)類型:

  C#

  var leftOuterJoinQuery =

  from category in categories

  join prod in products on category.ID equals prod.CategoryID into prodGroup

  from item in prodGroup.DefaultIfEmpty(new Product{Name = String.Empty, CategoryID = 0})

  select new { CatName = category.Name, ProdName = item.Name };

  equals 運(yùn)算符

  join 子句執(zhí)行同等聯(lián)接。換句話說,只能基于兩個(gè)鍵之間的相等關(guān)系進(jìn)行匹配。其他類型的比較(例如,“greater than”或“not equals”)不受支持。為了表明所有聯(lián)接都是同等聯(lián)接,join 子句使用 equals 關(guān)鍵字而不是 == 運(yùn)算符。equals 關(guān)鍵字只能用在 join 子句中,并且它與 == 運(yùn)算符之間存在一個(gè)重要區(qū)別。對于 equals,左鍵使用外部源序列,而右鍵使用內(nèi)部源序列。外部源僅在 equals 的左側(cè)位于范圍內(nèi),而內(nèi)部源序列僅在其右側(cè)位于范圍內(nèi)。

  非同等聯(lián)接

  通過使用多個(gè) from 子句將新序列單獨(dú)引入到查詢中,可以執(zhí)行非同等聯(lián)接、交叉聯(lián)接和其他自定義聯(lián)接操作。

  對象集合聯(lián)接與關(guān)系表聯(lián)接

  在 LINQ 查詢表達(dá)式中,聯(lián)接操作是在對象集合上執(zhí)行的。不能使用與兩個(gè)關(guān)系表完全相同的方式“聯(lián)接”對象集合。在 LINQ 中,僅當(dāng)兩個(gè)源序列沒有通過任何關(guān)系相互聯(lián)系時(shí),才需要使用顯式 join 子句。使用 LINQ to SQL 時(shí),外鍵表在對象模型中表示為主表的屬性。例如,在 Northwind 數(shù)據(jù)庫中,Customer 表與 Orders 表之間具有外鍵關(guān)系。在將這兩個(gè)表映射到對象模型時(shí),Customer 類具有一個(gè) Orders 屬性,該屬性包含與該 Customer 相關(guān)聯(lián)的 Orders 的集合。實(shí)際上,已經(jīng)為您執(zhí)行了聯(lián)接。

  復(fù)合鍵

  使用復(fù)合鍵可以測試多個(gè)值是否相等。還可以在 group 子句中使用組合鍵。

【c#查詢關(guān)鍵字之join 子句運(yùn)用方法】相關(guān)文章:

c#查詢關(guān)鍵字之group子句的使用09-07

java基本教程之join方法的詳解06-08

Java編程中this關(guān)鍵字與super關(guān)鍵字的使用方法08-23

查詢高考成績的方法及往年成績查詢方法10-04

PHP屏蔽關(guān)鍵字的方法是什么10-04

PHP自動(dòng)獲取關(guān)鍵字的方法技巧08-11

C#抽象工廠模式的幾種實(shí)現(xiàn)方法及比較10-20

C#檢測操作系統(tǒng)版本的方法匯總07-15

java之this關(guān)鍵字用法事例解析10-11

C#數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表的實(shí)例代碼10-22