Linq中的連線 join

2021-09-07 12:23:34 字數 3700 閱讀 5527

linq中連線主要有組連線、內連線、左外連線、交叉連線四種。各個用法如下。

1、 組連線

組連線是與分組查詢是一樣的。即根據分組得到結果。 如下例,根據publisther分組得到結果。

使用組連線的查詢語句如下:

//使用組連線

var groupquery = from publisher in sampledata.publishers

join book in sampledata.books

on publisher equals book.publisher into publisherbooks

select new

;

與上邊等同的groupby語句如下: 

//使用group

var querybygroup = from book in sampledata.books

group book by book.publisher into grouping

select new

;

2、內連線

內連線與sql中inner join一樣,即找出兩個序列的交集。如下例找出book中的publisher存在於sampledata.publishers的資料。

內連線查詢語句如下:

//join查詢語句

var joinquery = from publisher in sampledata.publishers

join book in sampledata.books

on publisher equals book.publisher

select new

;

與上邊等同的查詢操作符語句如下:

//join操作符語句

sampledata.publishers.join(

sampledata.books,               //join 物件

publisher => publisher,         //外部的key

book => book.publisher,         //內部的key

(publisher, book) => new        //結果

);

3、左外連線

左外連線與sql中left join一樣。如下例找出根據publisher中找出sampledata.publishers中所有資料和book中存在於publisher的資料。

左外連線查詢語句如下: 

//left join, 為空時用default

var leftjoinquerybydefault = from publisher in sampledata.publishers

join book in sampledata.books

on publisher equals book.publisher into publisherbooks

from book in publisherbooks.defaultifempty()

select new

;

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

我們可以不使用default關鍵字,但在要defaultifempty中給定當空時的預設物件值。語句如下: 

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

var leftjoinquery = from publisher in sampledata.publishers

join book in sampledata.books

on publisher equals book.publisher into publisherbooks

from book in publisherbooks.defaultifempty(

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

)select new

;

4、交叉連線

交叉連線與sql中cross join一樣。如下例中找出sampledata.publishers與sampledata.books的交叉連線。

交叉連線查詢語句:

var crossjoinquery = from publisher in sampledata.publishers

from book in sampledata.books

select new

;

查詢操作符語句: 

//不使用查詢表示式

sampledata.publishers.selectmany(publisher => sampledata.books.select(

book => new

));

本像用到的物件:

static public class sampledata

,new publisher ,

new publisher 

};static public author authors =

,new author ,

new author ,

new author 

};static public subject subjects =

,new subject ,

new subject 

};static public book books =

,pagecount=101,

price=25.55m,

publicationdate=new datetime(2004, 11, 10),

isbn="0-000-77777-2",

subject=subjects[0]

},new book ,

pagecount=300,

price=12m,

publicationdate=new datetime(2007, 9, 2),

isbn="0-111-77777-2",

subject=subjects[0]

},new book ,

pagecount=256,

price=35.5m,

publicationdate=new datetime(2007, 4, 1),

isbn="0-222-77777-2",

subject=subjects[0]

},new book ,

pagecount=1205,

price=35.5m,

publicationdate=new datetime(2006, 5, 5),

isbn="0-333-77777-2",

subject=subjects[2]

},new book ,

pagecount=50,

price=29m,

publicationdate=new datetime(1973, 2, 18),

isbn="2-444-77777-2",

subject=subjects[1]}};

}

Linq中的連線 join

linq中連線主要有組連線 內連線 左外連線 交叉連線四種。各個用法如下。1 組連線 組連線是與分組查詢是一樣的。即根據分組得到結果。如下例,根據publisther分組得到結果。使用組連線的查詢語句如下 使用組連線 var groupquery from publisher in sampleda...

Linq中的Join使用筆記

在進行資料庫操作時,經常會涉及到多表聯合查詢,這時就需要用到join。而連線也分為以下兩種 idgroupname1a 2b3c idusername groupid1王1 11王22 1王34from g in groups join u in users on g.id equals u.gro...

sql中的join連線

今天簡單的了解一下資料庫中的sql連線,具體的講解可以參考 資料庫原理與應用 這裡從實際的使用角度來說,首先準備測試資料,表test1,test2 建立表test1 create table test1 name varchar2 20 age int 建立表test2 create table t...