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 方法中返回。現在要獲得乙個年份列表,列出每年的賽車手冠軍和車隊冠軍。為此,...