Linq to EF 內連線和左外連線

2021-09-07 01:59:09 字數 1565 閱讀 2963

linq中連線主要有組連線、內連線、左外連線、交叉連線四種。本文主要講解沒連線和左外連線。

一、內連線

內連線與sql中inner join一樣,即找出兩個序列的交集

//內連線

join c in model.course on s.coursecno equals c.cno

where c.cno == 1

select new

};foreach (var item in query)

與上面的內連線語句相對應的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一樣

join c in model.course on s.coursecno equals c.cno into gc

from gci in gc.defaultifempty()

select new

};//outer join時必須將join後的表into到乙個新的變數gc中,然後要用gc.defaultifempty()表示外連線。

foreach (var item in query)

注:上例中使用了defaultifempty操作符,它能夠為實序列提供乙個預設的元素。defaultifempty使用了泛型中的default關鍵字。default關鍵字對於引用型別將返回null,而對於值型別則返回0。對於結構體型別,則會根據其成員型別將它們相應地初始化為null(引用型別)或0(值型別)

//left join, 為空時使用預設物件

join c in model.course

on s.coursecno equals c.cno into gc

from gci in gc.defaultifempty(

new course //設定為空時的預設值

)select new

;

與上面的左外連線語句相對應的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表示式,在此不再累述。

以上是自己學習時的一點見解,不對之處請拍磚指教。

連表查詢(內連線,左外連線,右外連線)

用兩個表 a table b table 關聯欄位a table.a id和b table.b id來演示一下mysql的內連線 外連線 左 外 連線 右 外 連線 全 外 連線 mysql版本 server version 5.6.31 mysql community server gpl 資料庫...

以Oracal為例內連線 左外連線和右外連線的區別

注 本文以oracle資料庫為例,所用sql標準為oracle專用,而不是sql99規則!首先我們建立兩個新錶tb stu和tb course 本文只是為了講述本質,因此 結構和資料從簡 tb stu 學生表 tb course 選課表 可以看到tb stu表中id為3的學生在tb course中沒...

LINQ 內連線和左外連線

使用join子句可以根據特定的條件合併兩個資料來源,但之前要獲得兩個要連線的列表。在一級方程式比賽中,有賽車手冠軍和車隊冠軍。賽車手從getchampions 方法中返回,車隊從getconstructorchampions 方法中返回。現在要獲得乙個年份列表,列出每年的賽車手冠軍和車隊冠軍。為此,...