Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便。今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更多在用Func形式,linq 只是略有涉及)。


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 == )
.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()
};

少了去重的方法,后期再补充!

Entity Frameword 查询 sql func linq 对比的更多相关文章

  1. PCB C# MongoDB 查询(SQL,NOSQL,C#对比)

    一.准备阶段 1.查询数据清单准备 2.这里先将SQL语句执行顺序列出来,方便后面语句对比更好理解 ()SELECT ()DISTINCT ()<Top Num> <select l ...

  2. 基础查询-SQL和Linq相互化

    目录 SELECT SQL SELECT DISTINCT 语句 WHERE 和 操作符 BETWEEN 和操作符 LIKE 和通配符 ORDER BY 排序 TOP In Alias(as) EXI ...

  3. 一个最简单的使用Entity Framework 查询SQL 数据库的例子

    1.ADO.NET 3.5 Entity Framework是随着.net framework 3.5一起发布的,确认开发环境版本是大于等于3.5版本 2.确认已经安装了ADO.NET 3.5 Ent ...

  4. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  5. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  6. Entity Framework查询

    Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...

  7. Entity Framework关于SQL注入安全问题

    1.EF生成的sql语句,用 parameter 进行传值,所以不会有sql注入问题 2.EF下有涉及外部输入参数传值的,禁止使用EF直接执行sql命令方式,使用实体 SQL   参考: https: ...

  8. .NET中那些所谓的新语法之四:标准查询运算符与LINQ

    开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50 ...

  9. entity framework 查询

    1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: //Func形式 var clients ...

随机推荐

  1. nginx 配置一个文件下载服务

    cat openvpn.conf server { listen ; server_name localhost; location / { root /home/openvpn/client_fil ...

  2. Sphinx-PHP使用Sphinx搜索技术

    Sphinx继承到PHP程序中, 有两种方式: Sphinx PHP模块: 编译生成PHP扩展模块 Sphinx API类: 直接使用Sphinx提供的类即可 首先我们应该使用Sphinx做以下几件事 ...

  3. C语言-常用函数处理

    1.使用fgets #define SLEN 50 char str[SLEN]; fgets(str, SLEN, stdin); i = ; while (str[i] != '\n' & ...

  4. 转:浅析VO、DTO、DO、PO的概念、区别和用处

    原文链接 概念: VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来. DTO(Data Transfer Object):数据传输对象,这个概 ...

  5. mongodb - mongostat说明

    # ./mongostat insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|a ...

  6. OPC UA的监控项、订阅、和通知

    MonitoredItem 每个监控项均指明了要监控的项目(item)和用来发送通知的订阅. item可以是一个节点的属性(node attribute). MonitorItem可以监控一个属性,一 ...

  7. 一个来自红帽的Java垃圾回收算法,试图把停顿时间降到10毫秒以下 原创 2017-01-10 薛命灯

    转自 微信聊聊架构 GC... 早在三年前,Red Hat就启动了Shenandoah项目.Shenandoah是一种新的Java虚拟机GC算法,目标是利用现代多核CPU的优势,减少大堆内存在GC方面 ...

  8. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结

    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 ...

  9. loongson官方PMON使用

    目录 [隐藏]  1 PMON使用介绍 1.1 进入PMON控制界面 1.2 Pmon的图形界面 1.3 Pmon的基本命令 1.3.1 Boot and Load 启动与加载内核 1.3.2 MyC ...

  10. python学习之多行字符串

    多行字符串的写法 ("..." "..." "...") 例子 >>> err = ("a" ... ...