返回顶部
首页 > 资讯 > 精选 >Entity Framework如何使用LINQ操作实体
  • 343
分享到

Entity Framework如何使用LINQ操作实体

2023-06-29 09:06:09 343人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Entity Framework如何使用LINQ操作实体,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是LINQ TO EntitiesLINQ,全称是Lan

这篇文章将为大家详细讲解有关Entity Framework如何使用LINQ操作实体,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、什么是LINQ TO Entities

LINQ,全称是Language-INtegrated Query(集成语言查询),是.net语言中查询数据的一种技术。LINQ to Entities是一种机制,它促进了使用LINQ对概念模型的查询。

因为LINQ是声明式语言,它让我们聚焦于我们需要什么数据而不是应该如何检索数据。LINQ to Entities在实体数据模型之上提供了一个很好的抽象,所以我们可以使用LINQ来指定检索什么数据,然后LINQ to Entities provider会处理访问数据库事宜,并为我们取到必要的数据。

二、LINQ to Entities执行流程

当我们使用LINQ to Entities对实体数据模型执行LINQ查询时,这些LINQ查询会首先被编译以决定我们需要获取什么数据,然后执行编译后的语句,从应用程序的角度看,最终会返回.NET理解的CLR对象。

Entity Framework如何使用LINQ操作实体

上图展示了LINQ to Entities依赖EntityClient才能够使用EF的概念数据模型

执行流程:

应用程序创建一个LINQ查询。
2、LINQ to Entities会将该LINQ查询转换成EntityClient命令。
3、EntityClient命令然后使用EF和实体数据模型将这些命令转换成sql查询。
4、然后会使用底层的ADO.NET provider将该SQL查询传入数据库
5、该查询然后在数据库中执行。
6、执行结果返回给EF。
7、EF然后将返回的结果转换成CLR类型,比如领域实体。
8、EntityClient使用项目,并返回必要的结果给应用程序。

三、使用LINQ to Entities操作实体

使用LINQ查询的方式有两种:
1、查询语法。
2、方法语法。

选择哪种语法完全取决于你的习惯,两种语法的性能是一样的。查询语法相对更容易理解,但是灵活性稍差;相反,方法语法理解起来有点困难,但是提供了更强大的灵活性。使用方法语法可以进行链接多个查询,因此在单个语句中可以实现最大的结果。

下面以一个简单的例子来理解一下这两种方法的区别。创建一个控制台程序,并命名。

1、定义领域实体:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LINQDemo.Model{    public class Book    {        public int Id { get; set; }        public string Name { get; set; }        public string Author { get; set; }        public DateTime PublicationDate { get; set; }    }}

2、定义初始化器,并写入初始化数据

using LINQDemo.Model;using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LINQDemo.EF{    public class SeedingDatainitializer : DropCreateDatabaseAlways<Context>    {        /// <summary>        /// 初始化种子数据        /// </summary>        /// <param name="context"></param>        protected override void Seed(Context context)        {            context.Books.Add(new Book { Name = "C#高级编程(第十版)", Author = "小明", PublicationDate = Convert.ToDateTime("2017-12-11 12:12:45") });            context.Books.Add(new Book { Name = "oracle入门到精通", Author = "张三", PublicationDate = Convert.ToDateTime("2015-12-11 12:12:45") });            context.Books.Add(new Book { Name = "javascript高级编程", Author = "李四", PublicationDate = Convert.ToDateTime("2011-09-11 12:12:45") });            base.Seed(context);        }    }}

3、定义数据库上下文类

using LINQDemo.Model;using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LINQDemo.EF{    public class Context :DbContext    {        public Context()            : base("AppConnection")        {            Database.SetInitializer<Context>(new SeedingDataInitializer());        }        // 添加到数据上下文        public virtual DbSet<Book> Books { get; set; }        protected override void OnModelCreating(DbModelBuilder modelBuilder)        {            // 设置生成的表名:Book            modelBuilder.Entity<Book>().ToTable("Book");            base.OnModelCreating(modelBuilder);        }    }}

4、Main函数定义如下:

using LINQDemo.EF;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LINQDemo{    class Program    {        static void Main(string[] args)        {            using (var context = new Context())            {                #region   查询语法                var result = from p in context.Books where p.Name.Equals("JavaScript高级编程") select p;                #endregion                #region 方法语法                var books = context.Books.Where(p => p.Name.Equals("JavaScript高级编程"));                foreach (var item in books)                {                    Console.WriteLine(string.FORMat("书名:{0},作者:{1},发布时间:{2}", item.Name, item.Author, item.PublicationDate));                }                #endregion            }            Console.WriteLine("完成");            Console.ReadKey();        }    }}

5、运行程序,查看结果

Entity Framework如何使用LINQ操作实体

查看数据库结果:

Entity Framework如何使用LINQ操作实体

查询语法和方法语法的执行结果都是一样的。

重点理解:

当使用LINQ to Entities时,理解何时使用IEnumerable和IQueryable很重要。如果使用了IEnumerable,查询会立即执行,如果使用了IQueryable,直到应用程序请求查询结果的枚举时才会执行查询,也就是查询延迟执行了,延迟到的时间点是枚举查询结果时。

如何决定使用IEnumerable还是IQueryable呢?使用IQueryable会让你有机会创建一个使用多条语句的复杂LINQ查询,而不需要每条查询语句都对数据库执行查询。该查询只有在最终的LINQ查询要求枚举时才会执行。

关于“Entity Framework如何使用LINQ操作实体”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Entity Framework如何使用LINQ操作实体

本文链接: https://lsjlt.com/news/324034.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Entity Framework如何使用LINQ操作实体
    这篇文章将为大家详细讲解有关Entity Framework如何使用LINQ操作实体,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、什么是LINQ TO EntitiesLINQ,全称是Lan...
    99+
    2023-06-29
  • EntityFramework使用LINQ操作实体
    一、什么是LINQ TO Entities LINQ,全称是Language-INtegrated Query(集成语言查询),是.NET语言中查询数据的一种技术。LINQ to E...
    99+
    2024-04-02
  • Entity Framework如何使用Code First的实体继承模式
    这篇文章主要介绍Entity Framework如何使用Code First的实体继承模式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Entity Framework的Code First模式有...
    99+
    2023-06-29
  • Entity Framework如何使用ObjectContext类
    本文小编为大家详细介绍“Entity Framework如何使用ObjectContext类”,内容详细,步骤清晰,细节处理妥当,希望这篇“Entity Framework如何使用ObjectContext类”文章能帮助...
    99+
    2023-07-02
  • Entity Framework使用Code First的实体继承模式
    目录一、TPT继承模式1、Person类2、使用数据迁移创建数据库3、填充数据二、TPH模式1、创建有继承关系的实体类2、创建数据上下文3、使用数据迁移创建数据库4、不使用默认生成的...
    99+
    2024-04-02
  • Entity Framework如何管理一对二实体关系
    这篇文章主要介绍Entity Framework如何管理一对二实体关系,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!要在数据库中配置一对多关系,我们可以依赖EF约定,还可以使用数据注解或Fluent API...
    99+
    2023-06-29
  • Entity Framework如何管理一对一实体关系
    这篇文章给大家分享的是有关Entity Framework如何管理一对一实体关系的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们现在已经知道如何使用Code First来定义简单的领域类,并且如何使用...
    99+
    2023-06-29
  • LINQ如何使用Skip操作
    小编给大家分享一下LINQ如何使用Skip操作,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!LINQ使用Skip操作LINQ支持许多内置的标准查询操作。如果你在类之前加入"using System.Query&q...
    99+
    2023-06-17
  • Linq 中如何使用Contains操作符
    Linq 中如何使用Contains操作符,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。投影和排序您可能还注意到我在之前的示例中暗藏了一个投影。在使用 Max 操作符之前,LI...
    99+
    2023-06-17
  • Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(StudentMod...
    99+
    2024-04-02
  • Entity Framework使用DBContext实现增删改查
    有一段时间没有更新博客了,赶上今天外面下雨,而且没人约球,打算把最近对Entity Framework DBContext使用的心得梳理一下,早些时候在网上简单查过,对于最新版本的E...
    99+
    2022-11-13
    Entity Framework DBContext 增删改查
  • Entity Framework Core如何实现表名映射
    小编给大家分享一下Entity Framework Core如何实现表名映射,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!表名映射我们知道:如果是在默认情况下,使用EFCore Code First的方...
    99+
    2023-06-29
  • C#如何使用LINQ查询操作符
    这篇文章主要讲解了“C#如何使用LINQ查询操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何使用LINQ查询操作符”吧!连表操作符1、内连接使用 join 子句 根据特定的条件合...
    99+
    2023-07-02
  • LINQ如何实现查询操作
    这篇文章主要介绍了LINQ如何实现查询操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。LINQ,语言级集成查询(Language INtegrated Query)经过了最...
    99+
    2023-06-17
  • Entity Framework中如何使用DataBase First模式实现增删改查
    本篇内容主要讲解“Entity Framework中如何使用DataBase First模式实现增删改查”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Entity ...
    99+
    2023-06-29
  • Entity Framework如何使用Code First模式管理数据库
    这篇文章主要为大家展示了“Entity Framework如何使用Code First模式管理数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Entity Fr...
    99+
    2023-06-29
  • 如何使用Entity Framework Core对Web项目生成数据库表
    小编给大家分享一下如何使用Entity Framework Core对Web项目生成数据库表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、引言这篇文章中我们讲解如何在Web项目中使用EntityFr...
    99+
    2023-06-29
  • Entity Framework Core如何使用控制台程序生成数据库表
    这篇文章主要介绍了Entity Framework Core如何使用控制台程序生成数据库表,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、引言我们使用C...
    99+
    2023-06-29
  • Linq如何定义实体继承
    这篇文章给大家分享的是有关Linq如何定义实体继承的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linq实体继承的定义Linq to sql支持实体的单表继承,也就是基类和派生类都存储在一个表中。对于论坛来说,帖...
    99+
    2023-06-17
  • Linq如何定义实体关系
    这篇文章主要介绍了Linq如何定义实体关系,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linq实体关系的定义比如我们的论坛分类表和论坛版块表之间就有关系,这种关系是1对多的...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作