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

1、简单查询:

SQL:

  1. SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID

EF:

  1. //Func形式
  2. var clients = ctx.Clients.Where(c => c.Type == 1 && c.Deleted == 0)
  3. .OrderBy(c => c.ID)
  4. .ToList();
  5. //Linq形式
  6. var clients = from c in ctx.Clients
  7. where c.Type == 1 && c.Deleted==0
  8. orderby c.ID
  9. select c;


2、查询部分字段:

SQL:

  1. SELECT ID,Name FROM [Clients] WHERE Status=1

EF:

  1. //Func形式
  2. var clients = ctx.Clients.Where(c => c.Status == 1)
  3. .Select(c => new { c.ID, Name = c.ComputerName })
  4. .ToList();
  5. //Linq形式
  6. var clients = from c in ctx.Clients
  7. where c.Status == 1
  8. select new { c.ID, Name = c.ComputerName }; 

3、查询单一记录:

SQL:

  1. SELECT * FROM [Clients] WHERE ID=100

EF:

  1. //Func形式
  2. var client = ctx.Clients.FirstOrDefault(c => c.ID == 100);
  3. //Linq形式
  4. var client = (from c in ctx.Clients
  5. where c.ID = 100
  6. select c).FirstOrDefault();


4、LEFT JOIN 连接查询

SQL:

  1. SELECT c.ID,c.ComputerName,g.Name GroupName
  2. FROM [Clients] c
  3. LEFT JOIN [Groups] g
  4. ON c.GroupID = g.ID
  5. WHERE c.Status=1

EF:

  1. //Func形式
  2. var clients = ctx.Clients.Where(c => c.Status == 1)
  3. .Select(c => new
  4. {
  5. c.ID,
  6. c.ComputerName,
  7. GroupName = ctx.Groups.FirstOrDefault(g => g.ID == c.GroupID).Name
  8. })
  9. .ToList();
  10. //Linq形式
  11. var clients = from c in ctx.Clients
  12. where c.Status == 1
  13. select new
  14. {
  15. c.ID,
  16. c.ComputerName,
  17. GroupName = (from g in ctx.Groups
  18. where g.ID == c.GroupID
  19. select g.Name).FirstOrDefault()
  20. };

5、INNER JOIN 连接查询:

SQL:

  1. SELECT c.ID,c.ComputerName,g.Name GroupName
  2. FROM [Clients] c
  3. INNER JOIN [Groups] g
  4. ON c.GroupID = g.ID
  5. WHERE c.Status=1
  6. ORDER BY g.Name

EF:

  1. //Func形式
  2. var clients = ctx.Clients.Where(c => c.Status == 1)
  3. .Join(ctx.Group, c => c.GroupID, g => g.ID, (c,g) =>
  4. {
  5. c.ID,
  6. c.ComputerName,
  7. GroupName = g.Name
  8. })
  9. .OrderBy(item => item.GroupName)
  10. .ToList();
  11. //Linq形式1
  12. var clients = from c in ctx.Clients
  13. from g in ctx.Groups
  14. where c.GroupID == g.ID
  15. orderby g.Name
  16. select new
  17. {
  18. c.ID,
  19. c.ComputerName,
  20. GroupName = g.Name
  21. };
  22. //Linq形式2
  23. var clients = from c in ctx.Clients
  24. where c.Status == 1
  25. join g in ctx.Group
  26. on c.GroupID equals g.ID into result
  27. from r in result
  28. order by r.Name
  29. select new
  30. {
  31. c.ID,
  32. c.ComputerName,
  33. GroupName = r.Name
  34. };


6、分页

SQL:

  1. -- 方案1
  2. SELECT TOP 10 * FROM [Clients] WHERE Status=1
  3. AND ID NOT IN
  4. (
  5. SELECT TOP 20 ID FROM [Clients] WHERE Status=1
  6. ORDER BY ComputerName
  7. )
  8. ORDER BY ComputerName
  9. --方案2
  10. SELECT * FROM
  11. (
  12. SELECT *, ROW_NUMBER() OVER(ORDER BY ComputerName) AS RowNo
  13. FROM [Clients]
  14. WHERE Status=1
  15. )t
  16. WHERE RowNo >= 20 AND RowNo < 30

EF:

  1. //Func形式
  2. var clients = ctx.Clients.Where(c => c.Status=1)
  3. .OrderBy(c => c.ComputerName)
  4. .Skip(20)
  5. .Take(10)
  6. .ToList();
  7. //Linq形式
  8. var clients = (from c in ctx.Clients
  9. orderby c.ComputerName
  10. select c).Skip(20).Take(10);

7、分组统计:

SQL:

  1. SELECT Status,COUNT(*) AS Cnt FROM [Clients]
  2. GROUP BY Status
  3. ORDER BY COUNT(*) DESC

EF:

  1. //Func形式
  2. var result = ctx.Clients.GroupBy(c => c.Status)
  3. .Select(s => new
  4. {
  5. Status = s.Key,
  6. Cnt = s.Count()
  7. })
  8. .OrderByDescending(r => r.Cnt);
  9. //Linq形式
  10. var result = from c in ctx.Clients
  11. group c by c.Status into r
  12. orderby r.Count() descending
  13. select new
  14. {
  15. Status = r.Key,
  16. Cnt = r.Count()
  17. };

未完待续……

整理一下Entity Framework的查询相关推荐

  1. Entity Framework异步查询和保存

    EF6开始提供了通过async和await关键字实现异步查询和保存的支持(.net 4.5及更高版本).虽然不是所有的操作都能从异步中获益,但是耗时的操作.网络或IO密集型任务中,使用异步可以提升客户 ...

  2. (转)动态Entity Framework查询:Dynamic Query 介绍

    原文地址:http://www.cnblogs.com/yinzixin/archive/2012/11/30/entity-framework-dynamic-query.html Dynamic ...

  3. Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)

    很久没有写博客了,一些读者也经常问问一些问题,不过最近我确实也很忙,除了处理日常工作外,平常主要的时间也花在了继续研究微软的实体框架(EntityFramework)方面了.这个实体框架加入了很多特性 ...

  4. Entity Framework 5.0基础系列

    1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http:/ ...

  5. c# ef报错_C#中Entity Framework常见报错汇总

    以下小编整理的Entity Framework常见错误的汇总,大家如果还有不明白可以在下面留言区讨论. 1 实体属性配置为IsRequired()对更新的影响 抛出异常类型DbEntityValida ...

  6. Entity Framework 简单增删改操作

    前言 在 Entity Framework 简单查询操作 中主要是学习了在Entity Framework中的几种不同模式的查询操作,现在主要来学习一下简单的增加.删除.修改操作. 增加 在EF中添加 ...

  7. 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明...

    一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...

  8. 【查询】—Entity Framework实例详解

    Entity Framework 查询使用集成查询,简称LINQ.LINQ是一个查询框架,并不限于Entity Framework使用,同样不限于数据库.LINQ Provider 负责将LINQ查询 ...

  9. 浅析Entity Framework Core2.0的日志记录与动态查询条件

    前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core2.0的日志记录与动态查询条件 去 ...

最新文章

  1. 11、Kubernetes集群安全机制
  2. Linux下安装rlwrap
  3. Tensor2Tensor 踩坑记录
  4. 怎样永久更改嵌入式linux系统ip,如何修改嵌入式系统IP
  5. ​求1000以内是3或者是5的倍数的值的和
  6. JSP如何获取Spring Boot的配置属性
  7. Maven学习五之Nexus中各repository介绍
  8. Spring Boot中自动注入没有生效,报NullPointer的问题
  9. AI产品经理的前世今生
  10. 机器学习sklearn(13)层次聚类
  11. html 正则表达式 正整数,javascript如何判断数字是否为正整数?
  12. win10开启无线网卡服务器,Win10笔记本电脑无线网卡 教你如何开启Win10笔记本内置无线网卡...
  13. 详解VLAN与划分广播域
  14. TTL转RS232电路--分享原理图和参考资料
  15. hdu5833 Zhu and 772002 (高斯消元的简单应用)
  16. CPU执行程序的原理(简化过程)
  17. cad镜像后标注尺寸数字反了_急!CAD镜像后文字反向应该怎么处理?
  18. apollo自动驾驶进阶学习之:如何调试减速带通行限速参数
  19. VisionPro基本使用
  20. 美好只在一瞬间[frwy]

热门文章

  1. 实体框架提供程序类型无法加载?
  2. 如何忽略SVN目录?
  3. 电脑遇到DNS服务器未响应的情况该怎么办
  4. php 获取header auth,php CURL Auth请求头和响应头获取
  5. matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)
  6. 单线程为什么cpu慢_面试时说Redis是单线程的,被喷惨了!
  7. ElementUI自定义主题颜色
  8. 套用带标题行的表格样式_比格式刷好用10倍,原来Excel表格还有这么神奇的功能!...
  9. java 方法互斥_Java 两个互斥方法同时访问一个成员变量
  10. android安全攻防实践_网络攻防小组招新,等待优秀的你!