Linq to EF 內連線和左外連線
Linq中連線主要有組連線、內連線、左外連線、交叉連線四種。本文主要講解沒連線和左外連線。
本次使用到的資料實體模型具體的建立方法不再累述。該實體模型中包括Student、Course兩個表,他們之間是一對多的關係。
一、內連線
內連線與SqL中inner join一樣,即找出兩個序列的交集
Model1Container model = new Model1Container(); //內連線 var query = from s in model.Student join c in model.Course on s.CourseCno equals c.Cno where c.Cno == 1 select new { ClassID = s.CourseCno, ClassName = c.Cname, Student = new { Name = s.Sname, ID = s.Sno } }; foreach (var item in query) { Response.Write("ClassID:" + item.ClassID + "ClassName:" + item.ClassName + "Name:" + item.Student.Name); }
與上面的內連線語句相對應的SQL指令碼語言如下所示:
SELECT [t0].[CourseCno] AS [ClassID], [t1].[Cname] AS [ClassName], [t0].[Sname] AS [Name], [t0].[Sno] AS [ID]
FROM [Student] AS [t0]
INNER JOIN [Course] AS [t1] ON [t0].[CourseCno] = [t1].[Cno]
WHERE [t1].[Cno] = @p0
二、左外連線
左外連線與SqL中left join一樣
Model1Container model = new Model1Container(); var query = from s in model.Student join c in model.Course on s.CourseCno equals c.Cno into gc from gci in gc.DefaultIfEmpty() select new { ClassID = s.CourseCno, ClassName = gci.Cname, Student = new { Name = s.Sname, ID = s.Sno } }; //Outer join時必須將join後的表into到一個新的變數gc中,然後要用gc.DefaultIfEmpty()表示外連線。 foreach (var item in query) { Response.Write("ClassID:" + item.ClassID + "ClassName:" + item.ClassName + "Name:" + item.Student.Name); }
注:上例中使用了DefaultIfEmpty操作符,它能夠為實序列提供一個預設的元素。DefaultIfEmpty使用了泛型中的default關鍵字。default關鍵字對於引用型別將返回null,而對於值型別則返回0。對於結構體型別,則會根據其成員型別將它們相應地初始化為null(引用型別)或0(值型別)
我們可以不使用default關鍵字,但在要DefaultIfEmpty中給定當空時的預設物件值。語句如下:
//left join, 為空時使用預設物件 var leftJoinQuery = from s in model.Student join c in model.Course on s.CourseCno equals c.Cno into gc from gci in gc.DefaultIfEmpty( new Course { Cname = "",Cperiod="" } //設定為空時的預設值 ) select new { ClassID = s.CourseCno, ClassName = gci.Cname, };
與上面的左外連線語句相對應的SQL指令碼語言如下所示:
SELECT [t0].[CourseCno] AS [ClassID], [t1].[Cname] AS [ClassName], [t0].[Sname] AS [Name], [t0].[Sno] AS [ID]
FROM [Student] AS [t0]
LEFT OUTER JOIN [Course] AS [t1] ON [t0].[CourseCno] = [t1].[Cno]
當然也可以通過LinqPad工具檢視上面的左外連線語句的Lamada表示式,在此不再累述。
以上是自己學習時的一點見解,不對之處請拍磚指教。
相關推薦
Linq to EF 內連線和左外連線
Linq中連線主要有組連線、內連線、左外連線、交叉連線四種。本文主要講解沒連線和左外連線。 本次使用到的資料實體模型具體的建立方法不再累述。該實體模型中包括Student、Course兩個表,他們之間是一對多的關係。 一、內連線 內連線與SqL中inner j
Hibernate中的迫切左外連線和左外連線
前邊我們講過了Hibernate的檢索方式及它的四個細節,常見的五中檢索方式是物件導航圖語言(customers.getOrders())、通過OID獲取物件(session.get(Department.class,1))、HQL查詢語句、QBC、本地SQL。我們詳細
mySql內連線,左外連線和右外連線,
1.使用連線查詢的場景 將多張表進行記錄的連線查詢(按照某個欄位指定的條件進行資料的拼接); 進行資料的拼接(兩張表的內容顯示在一個結果表中 使用連線查詢) 最終的結果是:記錄數有可能變化,欄位數一定會增加(至少兩張表的合併) 意義:在使用者檢視資料的時候,顯示的資料
左連線 ,右連線,內連線和全外連線的4者區別
基本定義: left join (左連線):返回包括左表中的所有記錄和右表中連線欄位相等的記錄。 right join (右連線):返回包括右表中的所有記錄和左表中連線欄位相等的記錄。 inner join (等值連線或者叫內連線):只返回兩個表中連線欄位相
資料庫的外連線、內連線、左外連線,全外連線
Students表和Advisors表 一、內連線 按照Advistor_ID進行表的合併,合併後的資料只有兩個表中Advistor_ID都有的值,對應的行 二、左外連線 按照Advistor_ID進行的左外連接合並,保證表Students中Advistor_ID的
內連線,左外連線(左連線),右外連線(右連線),全連線(交叉連線)
有兩個表A和表B。表A結構如下: Aid:int;標識種子,主鍵,自增ID Aname:varchar 資料情況,即用select * from A出來的記錄情況如下圖1所示: 圖1:A表資料 表B結構如下: Bid:int;標識
內連線、左外連線、右外連線、交叉連線及其區別
首先建立兩張表A、B。 表A: Aid:int型別,無符號遞增,主鍵 name:varchar型別 表B: Bid:int型別,無符號遞增,主鍵 name:varchar型別 age:int型
徹底搞懂Oracle的左外連線和右外連線(以資料說話)
Employees表: Department表: select e.last_name,e.department_id,d.department_name from employees e left outer join departments d
內連線、左外連線、右外連線、全外連線、交叉連線(CROSS JOIN)-----小知識解決大資料攻略
早就聽說了內連線與外連線,以前檢視中使用過、這次自考也學習了,只是簡單理解,現在深入探究學習(由於上篇部落格的出現)與實踐: 概念 關鍵字: 左右連線 資料表的連線有: 1、內連線(
迫切左外連線、 左外連線、 迫切內連線、 內連線
package com.baidu.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import org.hibernate.Qu
內連線、左外連線 TOTO 一對一 一對多 結果不一樣的
1. 簡介 2. 建表 A表 B表 注: B表的parent_id對應A表的id 3. 測試 3.1 顯式內連線 -- 顯示內連線 SELECT A.*, B.* FROM A INNER JOIN B ON A.id = B.parent_i
內連線、左外連線、右外連線、交叉連線區別
http://blog.csdn.net/cnham/archive/2008/06/25/2584936.aspx 在之前,我對MSSQL中的內連線和外連線所得出的資料集不是很清楚。這幾天重新溫習了一下SQL的書本,現在的思路應該是很清楚了,現在把自己的理解發出來給大家溫習下。希望和我一樣對SQL的連線
[資料庫]內連線、外連線(左外連線、又外連線)、全連線、自連線
1 內連線: 它返回欄位ID(連線條件)同時存在於兩個表中的記錄,也就是說,僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行,內聯接消除與另一個表中的任何行不匹配的行。(inner join或者join) 2 左連線: 左邊表全部行+右邊表相匹配
sql左外連線和右外連線的區別
兩個表:A(id,name)資料:(1,張三)(2,李四)(3,王五)B(id,name)資料:(1,學生)(2,老師)(4,校長)左連線結果:select A.*,B.* from A left join B on A.id=B.id;1 張三 1 學生2 李四 2 老師
mysql內連線、左外連線、右外連線、全連線詳解
內連線: 只連線匹配的行 左外連線: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行 右外連線: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行 全外連線: 包含左、右兩個表的全部行,不管另外一邊的表
內連線、左外連線、右外連線、交叉連線區別(圖解)
在之前,我對MSSQL中的內連線和外連線所得出的資料集不是很清楚。這幾天重新溫習了一下SQL的書本,現在的思路應該是很清楚了,現在把自己的理解發出來給大家溫習下。希望和我一樣對SQL的連線語句不太理解的朋友能夠有所幫助
5分鐘學會MySql的那些左連線、左外連線、內連線等等
首先,我們新建兩個表(員工表,和部門表)DROP DATABASE db0206; CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` INT(11) NOT NULL
內連線、左連線、左外連線、右連線的區別
一:測試例子 存在如下兩張表:年級與班級,表內容如下 班級表 二:內連線與自然連線 1:自然連線 對於select * from gradeclass gc where gc.grade_id in (select id from grade),其結果如下圖 其查詢
MySQL之內連線、左(外)連線、右(外)連線詳解
用兩個表(a_table、b_table),關聯欄位a_table.a_id和b_table.b_id來操作一下內連線,左(外)連線,右(外)連線。 MySQL:Navicat 資料庫表:a_table、b_table 主題:內連線、左連線(左外連線)、右連線(右外連線) 建表語句:
mysql 資料庫查詢語句 左外連線 右外連線 和內連線區別
左外連結查詢:A left join B on conidtion where condition 用A表 的全部資料去匹配 B表 B表無匹配資料時用null代替 左聯左不丟資料 右外連線查詢:A ri