整理一下Entity Framework的查询

2012-08-30 13:41:59

标签:Entity Framework

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://boytnt.blog.51cto.com/966121/977382

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的查询 [转]

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

  2. 转:整理一下Entity Framework的查询

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

  3. Entity Framework的查询

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

  4. Entity Framework 简单查询

    前言 首先来简单的复习一下如何使用Code First. 第一步还是先建立一个控制台的应用程序,然后通过Nuget添加Entity Framework.那么同时会给packages.config和Ap ...

  5. Entity Framework异步查询和保存

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

  6. Entity Framework关联查询以及数据加载(延迟加载,预加载)

    数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Lo ...

  7. Entity Framework (二) 查询

    待完善-------------------------------------- ----------- base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建 ...

  8. Entity Framework: 视图查询时重复返回第一行值, duplicate frst rows in resultset from a view

    http://blog.csdn.net/riverlau/article/details/7476449 1. 使用rownumber给view加上一个标示列 SELECT ROW_NUMBER() ...

  9. C# Entity Framework查询小技巧 NoTracking

    在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...

随机推荐

  1. java-URLConnection网络数据收取

    通过url创建connection方式收取 import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import ja ...

  2. win10下安装Ubuntu出现win10无法进入的情况

    昨天晚上在win10上安装Ubuntu Kylin16.04系统,结果发现重启的时候进不去windows系统了,而且报的错误是 /EndEntire file path: /ACPI(a0341d,0 ...

  3. Eclipse配置PyDev插件来实现python开发环境

    1.安装python解释器(完成的略过) 2.安装PyDev: 首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Eclipse无法正 ...

  4. css-css权威指南学习笔记3

    第三章 结构和层叠 1.确定应向一个元素应用哪些值时,用户代理不仅要考虑继承,还要考虑声明的特殊性,另外需要考虑声明本身的来源,这个过程就称为层叠.. 2.特殊性.如果一个元素有两个或多个冲突的属性声 ...

  5. Leetcode 343. Integer Break

    Given a positive integer n, break it into the sum of at least two positive integers and maximize the ...

  6. 【windows】跑大型程序时不要休眠和睡眠

    win10系统. 为了节能,长时间没有操作操作系统会自动进入休眠模式. 先前设定了"控制面板\硬件和声音\电源选项\编辑计划设置",都设定为"从不",结果不起作 ...

  7. 判断IE和Edge

    //判断是否是IE浏览器,包括Edge浏览器function IEVersion() { var userAgent = navigator.userAgent; if (!!window.Activ ...

  8. BZOJ1922 [Sdoi2010]大陆争霸

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  9. Jenkins 2.x新建节点配置(Windows)

    2.0版本以上默认加入了权限插件,所以在进入主界面时是需要登录的. 一.主界面->[系统管理]->[管理节点]->[新建节点],进行节点的添加: 二.输入节点名称,已经选择[Perm ...

  10. ecshop /includes/modules/payment/alipay.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP支付插件存在SQL注入漏洞,此漏洞存在于/includes/ ...