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 == 1 && c.Deleted == 0)
  •             .OrderBy(c => c.ID)
  •             .ToList();
  •  
  • //Linq形式
  • var clients = from c in ctx.Clients
  •               where c.Type == 1 && c.Deleted==0
  •               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 == 1)
  •             .Select(c => new { c.ID, Name = c.ComputerName })
  •             .ToList();
  •  
  • //Linq形式
  • var clients = from c in ctx.Clients
  •               where c.Status == 1
  •               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 == 100);
  •  
  • //Linq形式
  • var client = (from c in ctx.Clients
  •             where c.ID = 100
  •             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 == 1)
  •             .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 == 1
  •             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的查询的更多相关文章

    1. 整理一下Entity Framework的查询

      整理一下Entity Framework的查询 2012-08-30 13:41:59 标签:Entity Framework 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...

    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. 解决IE不支持position:fixed问题

      #box { /* 非IE6浏览器使用固定元素 */ position:fixed; top:0; left:0; /* IE6改为绝对定位,并通过css表达式根据滚动位置更改top的值 */ _po ...

    2. node入门开发遇到的问题

      最近在看node入门这本书,https://cnodejs.org/getstart 里面是跟随作者完成一个小的demo,书中不免会有遗漏的,下面是我在实现里面最后一个例子时遇到的问题,希望能够帮助其 ...

    3. vim中如何引用自定义模板文件

      我们在使用vim新建文件时可以引用自定义模板,来避免重复的数据格式处理花费太多时间. 实现方法很简单,只需要2步即可:1. 在.vim/template目录放入自己的模板文件(如shellconfig ...

    4. 华为OJ:火车进站

      火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...

    5. lintcode:买卖股票的最佳时机 IV

      买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...

    6. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

      在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

    7. java应用程序利用Exe4j打包exe文件

      1.      使用简介: 把java应用程序打成exe文件我们可以借助第三方软件exe4j来完成.Exe4j大家可以在网上下载,下载地址是: http://www.ej-technologies.c ...

    8. Qt之界面出现、消失动画效果(简单好用)

      在学习Qt的这2.3个月里,对Qt越发感兴趣,从刚开始的盲目.无所适从到现在的学习.研究.熟练.掌握的过程中,我学到了很多东西,也学会了如何通过自学让自己更加成熟.强大起来,如何更有效地提高自己学习. ...

    9. QT中可以用QProgressBar或着QProgressDialog来实现进度条

      QProgressBar的使用 首先在designer中拖一个按钮和进度条部件,按下面初始化 //补充:下面两句写在MainWindow的构造函数里进行初始化 ui->progressBar-& ...

    10. Visual studio C#语言输出调试信息到Output窗口方法

      1.菜单栏: 工具>选项>调试>将所有输出窗口文本重定向到即时窗口          2.使用Console.WriteLine或Write添加调试信息 3.按F5启动调试程序 4. ...