EntityFrameWork使用
1、简单查询:
SQL:
1
|
SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID |
EF:
1
2
3
4
5
6
7
8
9
10
|
//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:
1
|
SELECT ID, Name FROM [Clients] WHERE Status=1 |
EF:
1
2
3
4
5
6
7
8
9
|
//Func形式 var clients = ctx.Clients.Where(c => c.Status == 1) .Select(c => new { c.ID, Name = c.ComputerName }) .ToList(); //Linq形式 var clients = from c in ctx.Clients where c.Status == 1 select new { c.ID, Name = c.ComputerName }; : |
3、查询单一记录:
SQL:
1
|
SELECT * FROM [Clients] WHERE ID=100 |
EF:
1
2
3
4
5
6
7
|
//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:
1
2
3
4
5
6
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//Func形式 var clients = ctx.Clients.Where(c => c.Status == 1) .Select(c => new { c.ID, c.ComputerName, GroupName = ctx.Groups.FirstOrDefault(g => g.ID == c.GroupID).Name }) .ToList(); //Linq形式 var clients = from c in ctx.Clients where c.Status == 1 select new { c.ID, c.ComputerName, GroupName = ( from g in ctx.Groups where g.ID == c.GroupID select g.Name).FirstOrDefault() }; |
5、INNER JOIN 连接查询:
SQL:
1
2
3
4
5
6
7
|
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:
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 = ctx.Clients.Where(c => c.Status == 1) .Join(ctx.Group, c => c.GroupID, g => g.ID, (c,g) => { c.ID, c.ComputerName, GroupName = g.Name }) .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 { c.ID, c.ComputerName, GroupName = g.Name }; //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 { c.ID, c.ComputerName, GroupName = r.Name }; |
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 |
EF:
1
2
3
4
5
6
7
8
9
10
11
|
//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:
1
2
3
4
5
|
SELECT Status , COUNT (*) AS Cnt FROM [Clients] GROUP BY Status ORDER BY COUNT (*) DESC |
EF:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//Func形式 var result = ctx.Clients.GroupBy(c => c.Status) .Select(s => new { Status = s.Key, Cnt = s.Count() }) .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 { Status = r.Key, Cnt = r.Count() }; |
// INNER JOIN ****************************************************************************
var TelefoneInnerJoinPessoa = Db.Telefones
.AsNoTracking()
.Join(Db.Pessoas, t => t.PessoaId, p => p.PessoaId, (t, p) => new { t, p })
.Select(s => new
{
s.t.PessoaId,
s.p.Nome,
s.t.TelefoneId,
s.t.Ddd,
s.t.Numero
}).AsQueryable();
var TGeracao = TelefoneInnerJoinPessoa.ToList();
// INNER JOIN ****************************************************************************
// LEFT JOIN ****************************************************************************
var PessoaLeftJoinTelefone = Db.Pessoas
.AsNoTracking()
.GroupJoin(Db.Telefones, p => p.PessoaId, t => t.PessoaId, (p, t) => new { p, t })
.SelectMany(temp => temp.t.DefaultIfEmpty(), (p, t) => new
{
t.PessoaId,
p.p.Nome,
TelefoneId = (int?)t.TelefoneId,
t.Ddd,
t.Numero
}).AsQueryable();
var TGeracaoLeft = PessoaLeftJoinTelefone.ToList();
// LEFT JOIN ****************************************************************************
// GROUP BY *****************************************************************************
var TelefonesCountByPessoa =
Db.Telefones.AsNoTracking()
.GroupBy(x => x.PessoaId)
.Select(x => new
{
PessoaId = x.Key,
Quantidade = (int?)x.Count()
})
.Join(Db.Pessoas, a => a.PessoaId, p => p.PessoaId, (a, p) => new { a, p })
.Select(s => new
{
s.a.PessoaId,
s.p.Nome,
Quantidade = s.a.Quantidade ?? 0
}).AsQueryable();
var TGeracaoGroup1 = TelefonesCountByPessoa.ToList();
var TelefonesCountByPessoa1 =
Db.Telefones.AsNoTracking()
.GroupBy(x => x.PessoaId)
.Select(x => new
{
PessoaId = x.Key,
Quantidade = (int?)x.Count()
}).AsQueryable();
var PessoasToTelefonesCountByPessoa1 = Db.Pessoas
.AsNoTracking()
.GroupJoin(TelefonesCountByPessoa1, p => p.PessoaId, a => a.PessoaId, (p, a) => new { p, a })
.SelectMany(temp => temp.a.DefaultIfEmpty(),
(p, a) => new
{
p.p.PessoaId,
Quantidade = a.Quantidade ?? 0,
p.p.Nome
}).AsQueryable();
var TGeracaoGroup2 = PessoasToTelefonesCountByPessoa1.ToList();
var PessoasToTelefonesCountByPessoa3 = Db.Pessoas.Select(x => new
{
x.PessoaId,
x.Nome,
Quantidade = x.Telefones.LongCount()
}).AsQueryable();
var TGeracao3 = PessoasToTelefonesCountByPessoa3.ToList();
// GROUP BY *****************************************************************************
// UNION ALL ****************************************************************************
var TbAUnionAllTbB = Db.TbAs.Select(x => new
{
x.Id,
x.Descricao
}).Concat(Db.TbBs.Select(s => new
{
s.Id,
s.Descricao
})).AsQueryable();
var GeracaoUnionAll = TbAUnionAllTbB.ToList();
// UNION ALL ****************************************************************************
//IN, NOT IN, EXISTS e NOT EXISTS
//IN
ICollection<int> Lista = Db.TbBs
.AsNoTracking()
.Select(x => x.Id).ToList<int>();
ICollection<int> lista = new List<int>() { 1, 2 }; VALORES FIXOS
var SelectIn = Db.TbAs
.AsNoTracking()
.Where(x => Lista.Contains(x.Id))
.AsQueryable();
var GeracaoTIn = SelectIn.ToList();
//NOT IN
var SelectNotIn = Db.TbAs
.AsNoTracking()
.Where(x => !Lista.Contains(x.Id))
.AsQueryable();
var GeracaoTNotIn = SelectNotIn.ToList();
//IN, NOT IN, EXISTS e NOT EXISTS
EXISTS
var SelectExists = Db.TbAs
.AsNoTracking()
.Where(x => Db.TbBs.Select(a => a.Id).Contains(x.Id))
.AsQueryable();
var GeracaoTExists = SelectExists.ToList();
EXISTS
var SelectNotExists = Db.TbAs
.AsNoTracking()
.Where(x => !Db.TbBs.Select(a => a.Id).Contains(x.Id))
.AsQueryable();
var GeracaoTNotExists = SelectNotExists.ToList();
T-SQL的IN:
Select
ProductID, ProductName, CategoryID
From
dbo.Products
Where
CategoryID
in
(1, 2)
T-SQL的NOT IN:
Select
ProductID, ProductName, CategoryID
From
dbo.Products
Where
CategoryID
not in
(1, 2)
Or
Select
ProductID, ProductName, CategoryID
From
dbo.Products
Where
not
CategoryID
in
(1, 2)
LINQ的IN:
var queryResult = from p
in
db.Products
where (
new int
?[] {1,2}).Contains(p.CategoryID)
select p;
LINQ的IN解析成SQL:
SELECT
[t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM
[dbo].[Products]
AS
[t0]
WHERE
[t0].[CategoryID]
IN
(@p0, @p1)
LINQ的NOT IN:
var queryResult = from p
in
db.Products
where ! (
new int
?[] {1,2}).Contains(p.CategoryID)
select p;
LINQ的NOT IN解析成SQL:
SELECT
[t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM
[dbo].[Products]
AS
[t0]
WHERE
NOT
[t0].[CategoryID]
IN
(@p0, @p1)
Entity FrameWork 取表中字段的最大值
int? max = (from t in context.Test
select (int?)t.ID).Max();
int m = 0;
if (!max.HasValue)
{
m = 1;
}
else
m = (int)max + 1;
EntityFrameWork使用的更多相关文章
- EntityFramework Core Raw SQL
前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...
- 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper
剧情开始 为何相爱? 相处的问题? 女人的伟大? 剧情收尾? 有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易 ...
- 关于这段时间学习 EntityFramework的 一点感悟
Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...
- ABP文档 - EntityFramework 集成
文档目录 本节内容: Nuget 包 DbContext 仓储 默认仓储 自定义仓储 特定的仓储基类 自定义仓储示例 仓储最佳实践 ABP可使用任何ORM框架,它已经内置了EntityFrame(以下 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观
前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ...
- 问题记录:EntityFramework 一对一关系映射
EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...
- EntityFramework.Extended 支持 MySql
EntityFramework.Extended 默认不支持 MySql,需要配置如下代码: [DbConfigurationType(typeof(DbContextConfiguration))] ...
随机推荐
- 369. Plus One Linked List
Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...
- 第9章 硬件抽象层:HAL
HAL(硬件抽象层)是建立在Linux驱动之上的一套程序库.这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层.在传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件 ...
- OC calendar 实践中的那些坑
博客已经迁移到www.chjsun.top 最近想做一个万年历似的东西,因为需要把农历也添加进去,就想直接调用苹果自带的api,这样还方便一些, 搜索了一下,苹果对于时间的处理,还是提供了很多选择给我 ...
- 关于LDA的几何表示——MATLAB实现
承接这个PCA的练习,还有一个关于LDA的几何表示. 题目如下: 代码实现LDA如下:LDA.m clear clc % 生成training sample MU1 = [6 10]'; MU2 = ...
- Huffman编码(测试源代码)
1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...
- 每次Xcode 升级之后 插件失效,两步解决
以下内容来源:http://www.cocoachina.com/bbs/read.php?tid=296269 每次Xcode 升级之后 插件失效,两步解决 1.打开终端,输入以下代码获取到DVTP ...
- C++学习笔记34:泛型编程拓展3
输入流迭代器 #include <iostream> #include <iterator> #include <algorithm> #include <v ...
- Logback日志系统配置攻略
logback是log4j作者推出的新日志系统,原生支持slf4j通用日志api,允许平滑切换日志系统,并且对简化应用部署中日志处理的工作做了有益的封装. 官方地址为:http://logback.q ...
- PHP反向代理-百度图片
最近在一些开发中需要调用百度贴吧等一系列的百度图片 但是防盗链实在讨厌 于是就简单利用curl实现了反向代理(应该是这么叫的) 如果网站直接调用百度图片 会出现如下(博客园貌似在白名单 可以直接用百度 ...
- IIS 7 php 7.0 部署WE MALL
想在本地环境部署We Mall,本地环境为Win 7+IIS 7+php 7.0 在php manager调用phpinfo ouput()时老是报错: " HTTP 错误 500.19 - ...