Entity Framework查询
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 == )
.Select(c => new { c.ID, Name = c.ComputerName })
.ToList(); //Linq形式
var clients = from c in ctx.Clients
where c.Status ==
select new { c.ID, Name = c.ComputerName }; :
3、查询单一记录:
SQL:
SELECT * FROM [Clients] WHERE ID=100
EF:
//Func形式
var client = ctx.Clients.FirstOrDefault(c => c.ID == ); //Linq形式
var client = (from c in ctx.Clients
where c.ID =
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 == )
.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 ==
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:
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 == )
.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 ==
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
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=)
.OrderBy(c => c.ComputerName)
.Skip()
.Take()
.ToList(); //Linq形式
var clients = (from c in ctx.Clients
orderby c.ComputerName
select c).Skip().Take();
7、分组统计:
SQL:
SELECT Status,COUNT(*) AS Cnt FROM [Clients]
GROUP BY Status
ORDER BY COUNT(*) DESC
EF:
//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()
};
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 { 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:
- 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
 - {
 - 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:
- 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) =>
 - {
 - 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
 - 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 BY COUNT(*) DESC
 
EF:
- //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()
 - };
 
Entity Framework查询的更多相关文章
- Entity Framework查询原理
		
Entity Framework查询原理 前言 Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Rela ...
 - Entity Framework查询生成大量的子查询,如何避免?求救
		
最近使用Entity Framework做一个中型的项目,一张表含有千万条数据,并没有使用很复杂的查询,只是程序上使用了DTO进行帅选数据,且使用了分页,效果很不理想.经过跟踪sql,我发现很多简单的 ...
 - 如何得到EF(ADO.NET Entity Framework)查询生成的SQL? ToTraceString  Database.Log
		
ADO.NET Entity Framework ToTraceString //输出单条查询 DbContext.Database.Log //这里有详细的日志
 - C# Entity Framework查询小技巧 NoTracking
		
在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...
 - Entity Framework查询注意
		
首先我们看下where的方法,直接查看定义(定义如下),其实一种是对IEnumerable的扩展,一种是对IQueryable的扩展,直接看最常用的,其实区别就在IEnumerable的扩展的参数是系 ...
 - [原创]Entity Framework查询原理
		
前言 Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架.Ent ...
 - 解决Entity Framework查询匿名对象后的跨域访问的一种方式
		
在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...
 - 一个最简单的使用Entity Framework 查询SQL 数据库的例子
		
1.ADO.NET 3.5 Entity Framework是随着.net framework 3.5一起发布的,确认开发环境版本是大于等于3.5版本 2.确认已经安装了ADO.NET 3.5 Ent ...
 - Entity Framework查询,EF执行SQl
		
一.简介 EF 支持开放底层的 ADO.NET 框架,DbContext有三种常用方法 DbSet.SqlQuery //查询并返回Entities DbContext.Database.SqlQue ...
 
随机推荐
- 关于idea在运行web项目时部署的位置
			
(转) 以前一直很好奇,在idea中运行tomcat,把项目部署到其中,运行起来,然后我去tomcat目录下去看,根本找不到我部署的项目 那我的项目是咋运行的啊… - - 后来我就查啊查 ,纠结啊纠结 ...
 - 将arguments转换成数组的方法
			
将函数里的arguments,转换成一个真正的数组的方法,arguments是个类数组,除了有实参所组成的类似数组以外,还有自己的属性,如callee,arguments.callee就是当前正在执行 ...
 - auth模块用户认证
			
一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功 ...
 - 图表插件Highcharts的动态化赋值,实现图表数据的动态化设置显示
			
在很早之前就介绍过图表插件Highcharts的使用了,在2014年的随笔<基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts>,这里基本上都介绍 ...
 - day01(计算机组成,进制,内存分布,操作系统)
			
本周内容: 第一天: 计算机原理 操作系统 第二天: 编程语言 python入门:环境 - 编辑器 变量 基本数据类型 学习方法: 鸡汤 - 干货 wwwh : what | why | where ...
 - SqlServer2008_r2安装功能选择
			
勾上数据引擎服务.客户端工具链接.sdk.管理工具.客户连接SDK.最后一个 sql2008安装时,怎么选择服务账户NT Authority\System ,系统内置账号,对本地系统拥有完全控制权限: ...
 - vue.js实战——vue元素复用
			
Vue在渲染元素时,出于效率考虑,会尽可能地复用已有的元素而非重新渲染,例: <!DOCTYPE html> <html lang="en"> <he ...
 - 部署alinode监控线上应用
			
参考: https://segmentfault.com/a/1190000013089124
 - jsp篇 之 jsp页面中的路径问题
			
jsp页面中的路径问题: 一般情况下,jsp中路径问题是和我们之前在servlet中讨论的html里面的路径问题是一 样的,但是在[jsp中可以动态获得该项目的url]. 如果在jsp页面的上面写了这 ...
 - socket编程初识
			
一.socket 1.socket层 2.socket的理解 写python代码的时候socket就像是一个模块,通过import导入,通过调用模块中的方法建立两个进程之间的连接和通信. Socket ...