Entity Frameword 查询 sql func linq 对比
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 对比的更多相关文章
- PCB C# MongoDB 查询(SQL,NOSQL,C#对比)
一.准备阶段 1.查询数据清单准备 2.这里先将SQL语句执行顺序列出来,方便后面语句对比更好理解 ()SELECT ()DISTINCT ()<Top Num> <select l ...
- 基础查询-SQL和Linq相互化
目录 SELECT SQL SELECT DISTINCT 语句 WHERE 和 操作符 BETWEEN 和操作符 LIKE 和通配符 ORDER BY 排序 TOP In Alias(as) EXI ...
- 一个最简单的使用Entity Framework 查询SQL 数据库的例子
1.ADO.NET 3.5 Entity Framework是随着.net framework 3.5一起发布的,确认开发环境版本是大于等于3.5版本 2.确认已经安装了ADO.NET 3.5 Ent ...
- Entity Framework学习笔记(四)----Linq查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- Entity Framework查询
Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...
- Entity Framework关于SQL注入安全问题
1.EF生成的sql语句,用 parameter 进行传值,所以不会有sql注入问题 2.EF下有涉及外部输入参数传值的,禁止使用EF直接执行sql命令方式,使用实体 SQL 参考: https: ...
- .NET中那些所谓的新语法之四:标准查询运算符与LINQ
开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50 ...
- entity framework 查询
1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: //Func形式 var clients ...
随机推荐
- input-form-select-a-img-ul-dl标签
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- android之内容提供者解析
该系统有两个应用,比较繁琐.但是内容提供者是android里非常非常重要的一个内容,我们得好好学习下哦.先看效果图,我们提供了四个按钮,点击按钮便会进行相应的操作. 我们先看内容提供者所在的应用,代码 ...
- Linux 基础学习(第一节)
IP地址的配置 配置临时IP地址 ifconfig etho 192.168.0.91 255.255.255.0 图形化下面配置IP地址: 重启网卡服务: shell环境配置网卡信息 必备的参数 关 ...
- Phone
User-Agent Switcher for Chrome EditThisCookie cornerstone SVN
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
Atitit.Js调用后台语言 java c# php swing android swt的方法大总结 1. Js调用后台语言有三种方法1 2. Swt BrowserFunction 绑定方法 ...
- Binary Tree Postorder Traversal --leetcode
原题链接:https://oj.leetcode.com/problems/binary-tree-postorder-traversal/ 题目大意:后序遍历二叉树 解题思路:后序遍历二叉树的步骤: ...
- 1.Vector(向量容器)
一.概述 Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入 ...
- Android 开发手记二 C可执行程序编译实例(转帖)
http://www.cnblogs.com/gaozehua/archive/2011/09/02/2164077.html
- layui当点击增加的时候,将form中的值获取的添加到table行中代码
layui.use(['table','layer'],function(){ var $=layui.$, table=layui.table, layer=layui.layer; functio ...
- datatables 相关文章
http://blog.csdn.net/zhu_xiao_yuan/article/details/51252300 datatables参数配置详解 http://blog.csdn.net/j ...