Linq中的Join使用筆記

2021-09-05 09:03:08 字數 3050 閱讀 8269

在進行資料庫操作時,經常會涉及到多表聯合查詢,這時就需要用到join。而連線也分為以下兩種:

idgroupname1a

2b3c

idusername

groupid1王1

11王22

1王34

from g in groups

join u in users

on g.id equals u.groupid

select new

對應sql語句為

select [t0].[groupname], [t1].[username]

from [group] as [t0]

inner join [user] as [t1] on ([t0].[id]) = [t1].[groupid]

結果如下:

groupname

usernamea張1

b張2

from g in groups

join u in users

on g.id equals u.groupid

into grp

from grp in grp.defaultifempty()

select new

對應sql為

select [t0].[groupname], 

(case

when [t2].[test] is null then convert(nvarchar(50),@p0)

else [t2].[username]

end) as [username]

from [group] as [t0]

left outer join (

select 1 as [test], [t1].[username], [t1].[groupid]

from [user] as [t1]

) as [t2] on ([t0].[id]) = [t2].[groupid]

結果為:

groupname

usernamea王1

b王2c

from u in users

join g in groups

on u.groupid equals g.id

into grp

from grp in grp.defaultifempty()

select new

對應sql

select 

(case

when [t2].[test] is null then convert(nvarchar(50),@p0)

else [t2].[groupname]

end) as [groupname], [t0].[username]

from [user] as [t0]

left outer join (

select 1 as [test], [t1].[id], [t1].[groupname]

from [group] as [t1]

) as [t2] on [t0].[groupid] = ([t2].[id])

結果為

groupname

usernamea王1

b王2王3

var a=from g in groups

join u in users

on g.id equals u.groupid

into grp

from grp in grp.defaultifempty()

select new ;

var b=from u in users

join g in groups

on u.groupid equals g.id

into grp

from grp in grp.defaultifempty()

select new ;

var c=a.concat(b).distinct();

c.dump();

對應sql

select distinct [t7].[groupname], [t7].[value] as [username]

from (

select [t6].[groupname], [t6].[value]

from (

select [t0].[groupname],

(case

when [t2].[test] is null then convert(nvarchar(50),@p0)

else [t2].[username]

end) as [value]

from [group] as [t0]

left outer join (

select 1 as [test], [t1].[username], [t1].[groupid]

from [user] as [t1]

) as [t2] on ([t0].[id]) = [t2].[groupid]

union all

select

(case

when [t5].[test] is null then convert(nvarchar(50),@p1)

else [t5].[groupname]

end) as [value], [t3].[username]

from [user] as [t3]

left outer join (

select 1 as [test], [t4].[id], [t4].[groupname]

from [group] as [t4]

) as [t5] on [t3].[groupid] = ([t5].[id])

) as [t6]

) as [t7]

結果為

groupname

username王3a

王1b王2c

Linq中的連線 join

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

Linq中的連線 join

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

linq例項 Join的使用(四)

測試的class。public class user private set public string lastname private set public int id private set public user string firstname,string lastname,int i...