EntityFramework

1、简单查询:

SQL:

?


1

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

EF:

?


1

2

3

4

5

6

7

8

9

10

//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:

?


1

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

EF:

?


1

2

3

4

5

6

7

8

9

//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:

?


1

SELECT * FROM [Clients] WHERE ID=100

EF:

?


1

2

3

4

5

6

7

//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:

?


1

2

3

4

5

6

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:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//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:

?


1

2

3

4

5

6

7

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:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

//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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

-- 方案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:

?


1

2

3

4

5

6

7

8

9

10

11

//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:

?


1

2

3

4

5

SELECT  Status ,

        COUNT(*) AS Cnt

FROM    [Clients]

GROUP BY Status

ORDER BY COUNT(*) DESC

EF:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//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()

                };

EntityFramework,布布扣,bubuko.com

时间: 2024-11-04 20:10:27

EntityFramework的相关文章

EntityFramework 4使用存储过程分页

1 CREATE PROC usp_OrgPage_SQL 2 @pageIndex INT, 3 @pageSize INT, 4 @totalCount INT OUTPUT 5 AS 6 BEGIN 7 SET @totalCount = (SELECT COUNT(*) FROM dbo.Organization) 8 SELECT * FROM 9 ( 10 SELECT *,ROW_NUMBER() OVER(ORDER BY OrganizationID DESC)AS row F

EntityFramework 简单入个门

任何一个和数据相关的系统里,数据持久化都是一个不容忽视的问题. 一直以来,Java 平台出了很多 NB 的 ORM 框架,Hibernate.MyBatis等等..NET 平台上,ORM 框架这一块一直没有一个能吊到让几乎所有开发人员改掉以拼写 SQL 语句访问数据库的习惯. 实际上,在 .NET 平台上,也层出不穷的出现了很多类似的玩意儿,比如Nhibernate.Ibatis,还有微软的亲儿子--坑爹的 LinqToSQL.虽然这么多框架,但是真的没见过 .NET 平台的 ORM 框架能像

EntityFramework Core 1.1有哪些新特性呢?

前言 在项目中用到EntityFramework Core都是现学现用,及时发现问题及时测试,私下利用休闲时间也会去学习其他未曾遇到过或者用过的特性,本节我们来讲讲在EntityFramework Core 1.1中出现了哪些新特性供我们使用. EntityFramework Core 1.1新特性探讨 DbSet.Find 在EF 6.x中也有此方法的实现,在EF Core 1.1中也同样对此方法进行了实现,为什么要拿出来讲呢,当然也有其道理,我们一起来看看.在         public 

EntityFramework Core Raw SQL

EntityFramework Core Raw SQL 基础查询(执行SQL和存储过程) 啥也不说了,拿起键盘就是干,如下:     public class HomeController : Controller     {        private IBlogRepository _blogRepository;        public HomeController(IBlogRepository blogRepository)         {             _blo

EntityFramework 学习 一 并发

EntityFramework默认支持乐观并发 乐观并发中,实体加载后如果都没发生变化,ef保存该实体 首先,我们需要一个rowversion列为了控制student实体的并发问题,rowversion的数据类型为字节数组,rowversion像是自增id, rowversion的值在数据库当中自动添加和更新 ef将在where子句中添加rowversion列,当你进行更新操作,如果rowversion的值与where子句中的值不一致,则抛出异常 Student student1WithUser

EntityFramework Core Raw Query再叙注意事项后续

前言 话说通过EntityFramwork Core进行原始查询又出问题,且听我娓娓道来. EntityFramework Core Raw Query后续 当我们进行复杂查询时我们会通过原始查询来进行,我们定义如下ViewModel public class BlogViewModel { public int Id { get; set; } public string Name { get; set; } public string Url { get; set; } public str

entityframework.extended安装

在开始学习EF过程中,发现EF的批量更新和批量删除比较缓慢,在网上搜索到entityframework.extended 插件很好的解决了这个问题,故此想下载安装学习一下,下面是自己再安装过程中遇到的问题以及解决方法. 一.entityframework.extended 安装步骤: 出现错误提示如下: 二.解决问题方法 1.找到DNS服务器地址 再网上经过一番查找好,这篇博客给予了我启发http://blog.csdn.net/bklydxz/article/details/50967498,

EntityFramework、Dapper vs 草根框架性能

EntityFramework.Dapper vs 草根框架性能 扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 EntityFramework 和 NHibernate,还有一些出自草根之手的,如 Chloe.ORM.各式各样,层出不穷.试问,为何要重复造轮子?很简单,咱来自火星,目前地球上还没一款轮子适合咱这辆火星车~ 为加深对各个 ORM 框架的了解,同时也想看看咱自己的框架性能如何,也可以让对 Chloe 感兴趣

Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

面向接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理. 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下推崇最高的两种ORM工具. 1.EntityFramework是微软出的根正苗红的.netd的ORM工具,直接在Vs工具和Mvc框架中集成了,默认生成的项目就是使用EntityFramework的;微软也一直都在维护更新升级,最新版本最新版本都在EF7了.也迁移到了最新的.net Core平台了

EntityFramework学习

本文档主要介绍.NET开发中两项新技术,.NET平台语言中的语言集成查询技术 - LINQ,与ADO.NET中新增的数据访问层设计技术ADO.NET Entity Framework.ADO.NET的LINQ to Entity部分以LINQ为基础,为了完整性首先介绍LINQ技术. 预备知识 LINQ技术 LINQ是.NET 3.5中新增的一种技术,这个技术扩展了.NET平台上的编程语言,使其可以更加方便的进行数据查询,单纯的LINQ技术主要完成对集合对象(如System.Collection下