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...