整理一下Entity Framework的查詢

2021-08-28 08:16:55 字數 3912 閱讀 3780

entity framework是個好東西,雖然沒有hibernate功能強大,但使用更簡便。今天整理一下常見sql如何用ef來表達,func形式和linq形式都會列出來(本人更喜歡func形式)。

1、簡單查詢:

sql:

select * from [clients] where type=1 and deleted=0 order

by id 

ef:

//func形式

var clients = ctx.clients.where(c => c.type == 1 && c.deleted == 0) 

.orderby(c => c.id) 

.tolist(); 

//linq形式

var clients = from c in ctx.clients 

where c.type == 1 && c.deleted==0 

orderby c.id 

select c; 

2、查詢部分字段:

sql:

select id,name

from [clients] where status=1 

ef:

//func形式

var clients = ctx.clients.where(c => c.status == 1) 

.select(c => new ) 

.tolist(); 

//linq形式

var clients = from c in ctx.clients 

where c.status == 1 

select new ;

3、查詢單一記錄:

sql:

select * from [clients] where id=100 

ef:

//func形式

var client = ctx.clients.firstordefault(c => c.id == 100); 

//linq形式

var client = (from c in ctx.clients 

where c.id = 100 

select c).firstordefault(); 

4、left join 連線查詢

sql:

select c.id,c.computername,g.name groupname  

from [clients] c  

left

join [groups] g 

on c.groupid = g.id 

where c.status=1 

ef:

//func形式

var clients = ctx.clients.where(c => c.status == 1) 

.select(c => new

) .tolist(); 

//linq形式

var clients = from c in ctx.clients 

where c.status == 1 

select new; 

5、inner join 連線查詢:

sql:

select c.id,c.computername,g.name groupname  

from [clients] c 

inner

join [groups] g 

on c.groupid = g.id 

where c.status=1 

order

by g.name

ef:

//func形式

var clients = ctx.clients.where(c => c.status == 1) 

.join(ctx.group, c => c.groupid, g => g.id, (c,g) =>  

) .orderby(item => item.groupname) 

.tolist(); 

//linq形式1

var clients = from c in ctx.clients 

from g in ctx.groups 

where c.groupid == g.id 

orderby g.name 

select new

; //linq形式2

var clients = from c in ctx.clients 

where c.status == 1 

join g in ctx.group 

on c.groupid equals g.id into result 

from r in result 

order by r.name 

select new; 

6、分頁

sql:

-- 方案1

select

top 10 * from [clients] where status=1 

and id not

in( 

select

top 20 id from [clients] where status=1 

order

by computername 

) order

by computername 

--方案2

select * from

( select *, row_number() over(order

by computername) as rowno 

from [clients] 

where status=1 

)t where rowno >= 20 and rowno < 30 

ef:

//func形式

var clients = ctx.clients.where(c => c.status=1) 

.orderby(c => c.computername) 

.skip(20) 

.take(10) 

.tolist(); 

//linq形式

var clients = (from c in ctx.clients 

orderby c.computername 

select c).skip(20).take(10); 

7、分組統計:

sql:

select status,count(*) as cnt from [clients]  

group

by status 

order

bycount(*) desc

ef:

//func形式

var result = ctx.clients.groupby(c => c.status) 

.select(s => new

) .orderbydescending(r => r.cnt); 

//linq形式

var result = from c in ctx.clients 

group c by c.status into r 

orderby r.count() descending 

select new; 

未完待續……

整理一下HIVE概念

存資料的資料庫 hive不同於其他資料庫的地方就在於建立表這個地方。hive建立表並不是有固定的表的格式,而是它僅僅記錄了匯入的資料的格式,例如行分隔符 列分隔符等,它將這些存於元資料庫裡,這樣就建立了一張表,換而言之,hive支援不同格式的資料匯入,你只要告訴hive你的資料是什麼格式的,hive...

大一下C 整理

一 指標 指標在使用之前必須初始化 野指標的指向是無法控制的 指標變數所佔的空間大小相當於乙個整型變數的大小 隨著機器改變 32位機中佔4個位元組 二 引用 namespace 在使用變數前要確定其所在位置 影響變數的生存週期 字串是以陣列形式存放資料的 最後一位是空白結束符0 所以字陣列長度比字串...

整理一下Entity Framework的查詢

entity framework是個好東西,雖然沒有hibernate功能強大,但使用更簡便。今天整理一下常見sql如何用ef來表達,func形式和linq形式都會列出來 本人更喜歡func形式 1 簡單查詢 sql select from clients where type 1 and dele...