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 == && c.Deleted == )
.OrderBy(c => c.ID)
.ToList();
//Linq形式
var clients = from c in ctx.Clients
where c.Type == && c.Deleted==
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 == 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的查询 2012-08-30 13:41:59 标签:Entity Framework 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...
- Entity Framework 简单查询
前言 首先来简单的复习一下如何使用Code First. 第一步还是先建立一个控制台的应用程序,然后通过Nuget添加Entity Framework.那么同时会给packages.config和Ap ...
- 整理一下Entity Framework的查询 [转]
Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...
- 转:整理一下Entity Framework的查询
Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...
- Entity Framework异步查询和保存
EF6开始提供了通过async和await关键字实现异步查询和保存的支持(.net 4.5及更高版本).虽然不是所有的操作都能从异步中获益,但是耗时的操作.网络或IO密集型任务中,使用异步可以提升客户 ...
- Entity Framework关联查询以及数据加载(延迟加载,预加载)
数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Lo ...
- Entity Framework (二) 查询
待完善-------------------------------------- ----------- base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建 ...
- Entity Framework: 视图查询时重复返回第一行值, duplicate frst rows in resultset from a view
http://blog.csdn.net/riverlau/article/details/7476449 1. 使用rownumber给view加上一个标示列 SELECT ROW_NUMBER() ...
- C# Entity Framework查询小技巧 NoTracking
在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...
随机推荐
- iOS8.1 编译ffmpeg和集成第三方实现直播(监控类)
iOS8.1 编译ffmpeg和集成第三方实现直播(监控类) http://www.mamicode.com/info-detail-476094.html 一,下载并在终端中运行脚本编译ffmpeg ...
- [搜索]Trie树的实现
trie这种树也被称为线索,搜索树. 正如图 以下是用stl 的map来实现 class trie_item_c { public: trie_item_c(){} trie_item_c(const ...
- App各种Icon及Launch image的尺寸和用途
App各种Icon及Launch image的尺寸和用途 IOS7,8 Asset iPhone 6 Plus (@3x) iPhone 6 and iPhone 5 (@2x) iPhone 4s ...
- Erlang OTP编程初体验——gen_server和行为模式
http://blog.sina.com.cn/s/blog_3fe961ae0101k4p6.html 行为模式其实非常类似于面向对象语言中的接口,至少笔者是这么理解的.OTP行为模式将一些反复出现 ...
- 学习鸟哥的Linux私房菜笔记(14)——硬件配置与管理
一.设备文件 Linux沿袭了Unix的风格,将所有设备看成一个文件 设备文件分为两种: 块设备文件(b):比如硬盘.光驱 字符设备文件(c):比如串口.键盘 设备文件一般存放在/dev目录下 二.常 ...
- matlab 图像分块及恢复
1. block_divide % 返回的块向量构成的矩阵,其维度信息为 K^2 * N,每一列由块构成的列向量 function P = block_divide(I, K) r = size(I, ...
- 【21.67%】【codeforces 727B】Bill Total Value
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- JieBaNet+Lucene.Net
基于JieBaNet+Lucene.Net实现全文搜索 实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前 ...
- WPF依赖属性(续)(3)依赖属性存储
原文:WPF依赖属性(续)(3)依赖属性存储 在之前的两篇,很多朋友参与了讨论,也说明各位对WPF/SL计数的热情,对DP系统各抒已见,当然也出现了一些分歧. 以下简称DP为依赖属性 ...
- DM365 IPNC软件架构具体解释
于2013在上半场 - 年DM365.DM368的IPNC(网络摄像机)与稳定性测试工作产品结束. 1.简单介绍: TI针对TMS320DM365.DM368进行了DVR和IPNC的应用方案參考.DV ...