Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便。今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式)。
1、简单查询:
SQL:
1
|
SELECT
*
FROM
[Clients]
WHERE
Type=1
AND
Deleted=0
ORDER
BY
ID
|
1
2
3
4
5
6
7
8
9
10
|
//Func形式
var
clients = (c => == 1 && == 0)
.OrderBy(c => )
.ToList();
//Linq形式
var
clients =
from
c
in
where
== 1 && ==0
orderby
select
c;
|
2、查询部分字段:
SQL:
1
|
SELECT
ID,
Name
FROM
[Clients]
WHERE
Status=1
|
1
2
3
4
5
6
7
8
9
|
//Func形式
var
clients = (c => == 1)
.Select(c =>
new
{ , Name = })
.ToList();
//Linq形式
var
clients =
from
c
in
where
== 1
select
new
{ , Name = }; :
|
3、查询单一记录:
SQL:
1
|
SELECT
*
FROM
[Clients]
WHERE
ID=100
|
1
2
3
4
5
6
7
|
//Func形式
var
client = (c => == 100);
//Linq形式
var
client = (
from
c
in
where
= 100
select
c).FirstOrDefault();
|
4、LEFT JOIN 连接查询
SQL:
1
2
3
4
5
6
|
SELECT
,
,
g.
Name
GroupName
FROM
[Clients] c
LEFT
JOIN
[Groups] g
ON
=
WHERE
= 1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//Func形式
var
clients = (c => == 1)
.Select(c =>
new
{
,
,
GroupName = (g => == ).Name
})
.ToList();
//Linq形式
var
clients =
from
c
in
where
== 1
select
new
{
,
,
GroupName = (
from
g
in
where
==
select
).FirstOrDefault()
};
|
5、INNER JOIN 连接查询:
SQL:
1
2
3
4
5
6
7
|
SELECT
,
,
g.
Name
GroupName
FROM
[Clients] c
INNER
JOIN
[Groups] g
ON
=
WHERE
= 1
ORDER
BY
g.
Name
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//Func形式
var
clients = (c => == 1)
.Join(, c => , g => , (c,g) =>
{
,
,
GroupName =
})
.OrderBy(item => )
.ToList();
//Linq形式1
var
clients =
from
c
in
from
g
in
where
==
orderby
select
new
{
,
,
GroupName =
};
//Linq形式2
var
clients =
from
c
in
where
== 1
join
g
in
on
equals
into
result
from
r
in
result
order
by
select
new
{
,
,
GroupName =
};
|
6、分页
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
-- 方案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
|
1
2
3
4
5
6
7
8
9
10
11
|
//Func形式
var
clients = (c => =1)
.OrderBy(c => )
.Skip(20)
.Take(10)
.ToList();
//Linq形式
var
clients = (
from
c
in
orderby
select
c).Skip(20).Take(10);
|
7、分组统计:
SQL:
1
2
3
4
5
|
SELECT
Status ,
COUNT
(*)
AS
Cnt
FROM
[Clients]
GROUP
BY
Status
ORDER
BY
COUNT
(*)
DESC
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//Func形式
var
result = (c => )
.Select(s =>
new
{
Status = ,
Cnt = ()
})
.OrderByDescending(r => );
//Linq形式
var
result =
from
c
in
group
c
by
into
r
orderby
()
descending
select
new
{
Status = ,
Cnt = ()
};
|