首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ORM查询语言(OQL)简介--高级篇:脱胎换骨

自2006年第一版以来,经历了多次重构,到PDF.NET Ver 4.X 版本,已经比较稳定了,在我做的项目和框架用户朋友的项目中得到成功应用,基本符合一般的常规应用需求。...NET的特性,比如泛型、反射、表达式树等东西,因此理论上OQL可以跨语言平台,比如移植到Java,C++,VB等。...下面是来自SQLSERVER 联机帮助的说明: 子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。 许多包含子查询的 Transact-SQL 语句都可以改用联接表示。...尽管EF是PDF.NET ORM 的强劲对手,但 PDF.NET ORM的查询语言OQL,相对于EF的查询语言Linq,还是有自己独立的特色,OQL比Linq更接近SQL,Linq是VS的语法糖,本质上...,也不需要Lambda表达式,更不需要表达式树,就能够直接获取到要查询的表名称和字段名称,写法比Linq更简洁,处理速度更快速。

2.6K70

Entity Framework Core 2.0 新特性

(本文的英文原文地址:这里) 1.实体方面的新内容     1.1表拆分      现在可以将多个实体类型映射到将要共享主键列的同一个表,并且每一行将对应于两个或多个实体。    ...使用所属类型与EF6中使用复杂类型类似,(PS:这里解释一下EF6中的复杂类型,复杂类型是允许在实体中组织标量属性的实体类型的非标量属性。像实体一样,复杂类型由标量属性或其他复杂类型属性组成。)...显式编译的查询API已经在以前版本的EF和LINQ to SQL中可用,以允许应用程序缓存查询的翻译,以便它们只能被计算一次并执行多次。...3.3FromSql和ExecuteSqlCommand中的字符串插值 C#6(C#6.0特性请移步:这里)中引入了字符串插值,这是一个允许C#表达式直接嵌入到字符串文字中的功能,提供了一种在运行时构建字符串的好方法...,添加更多的数据库方法),EF Core可以使用它们来定义映射到数据库函数或操作符的方法,以便可以在LINQ查询中调用它们。

3.9K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C#内建接口:IQueryable

    其主要用于 LINQ(Language Integrated Query)查询,它允许我们在编写类型安全的查询表达式时,将查询操作推迟到实际执行查询的时候,以便进行更有效的查询优化。...这意味着当我们在 IQueryable 对象上构建查询表达式时,查询不会立即执行,而是在实际需要结果时才会执行。这使得我们可以在编写查询时进行组合、筛选和排序等操作。...我们可以通过使用 LINQ 查询表达式或方法链式调用来构建查询,例如使用 Where、OrderBy、Select 等方法。...在 C# 中,常用的查询提供者是 Entity Framework(EF),它可以将 IQueryable 查询转换为适当的 SQL 查询语句,并与数据库进行交互以获取结果。...可组合性:IQueryable 查询具有良好的可组合性,我们可以根据需要在查询中添加和组合多个查询操作。这使得我们可以根据不同的条件动态构建查询,以及重复使用和组合查询逻辑。

    31810

    【深入浅出C#】章节 9: C#高级主题:LINQ查询和表达式

    下面是这两种语法风格的对比: 查询表达式语法: 使用类似于SQL的语法,更接近自然语言。 更具可读性,对于初学者来说更容易理解。 通常适用于复杂查询,涉及多个条件、排序和分组。...to Entities / LINQ to SQL:使用ORM工具(如Entity Framework或LINQ to SQL)从数据库中获取数据。...四、LINQ查询操作和结果 4.1 如何构建和组合多个LINQ查询操作符 构建和组合多个LINQ查询操作符是通过链式调用操作符的方式来实现的。...以下是如何构建和组合多个LINQ查询操作符的示例: 假设我们有一个包含一些人员信息的集合,每个人员都有姓名、年龄和职业属性。...六、LINQ和集合类型 6.1 如何在LINQ查询中处理集合类型 在LINQ查询中处理集合类型是非常常见的情况,因为LINQ的主要目的之一就是对集合进行查询、过滤、投影和操作。

    2.3K61

    .NET面试题系列 - LINQ:性能

    我们可以通过LINQPAD或其他方式检查编译器生成的SELECT语句数目,一定会是N+1条SQL语句。 解决方法:使用一个匿名对象作为中间表格,预先将两个表join到一起: ?...生成的SQL将只有一句话! 这篇文章中的第三点,就是一个典型的SELECT N+1问题。...在EF6中,我们还可以使用这样的方法: ? 注意:编译器不一定能够将你的LINQ语句翻译为SQL,例如字符串的IndexOf方法就不被支持。...(这意味着存在一个LINQ语句到SQL的表达式转换) 数据规模是否巨大? 是否需要重复极其多次运行相同的LINQ语句?...例如EF使用了反射,但如果你的ORM只用于你开发的软件,所有的情况你都可以事先预计,那你也可以不用反射 而大部分ORM开发出来的目标仅仅是: 令查询语法更加接近SQL 加入了若干语法糖或代码生成快捷方式

    2.6K40

    金三银四面试:C#.NET面试题中高级篇5-Linq和EF

    IEnumerable是延迟执行的,当没有触发执行时,就不会进行任何运算。Select方法不会触发LINQ的执行。...LINQPad支持使用SQL或C#语句(点标记或查询表达式)进行查询。...你也可以通过点击橙色圈内的各种不同格式,看到查询表达式的各种不同表达方式: Lambda:查询表达式的Lambda表达式版本, SQL:由编译器转化成的SQL,通常这是我们最关心的部分, IL:IL语言...LINQ to SQL可以将查询表达式转换为SQL语句,然后在数据库中执行。相比LINQ to Object,则是将查询表达式直接转化为Enumerable的一系列方法,最终在C#内部执行。...将查询表达式转换为SQL语句并不保证一定可以成功。 10.除了EF,列举出你知道的ORM框架?

    4.2K30

    盘点 .NET 比较流行的开源的ORM框架

    初期开发过程中吸取了NBear与MySoft的一些精华并加入新思想,之后参考EF Lambda语法进行大量扩展。 经过数十个版本的更新迭代发布全新v2.0版本,支持动态列/表、分库/分表等。...CRUD 助手 Dapper.SqlBuilder 用于动态且可组合地构建 SQL 查询的组件 Dapper.StrongName 支持 MySQL、Sqlite、SqlICE 和 Firebird 的高性能微...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式而不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。...您的查询由 C# 编译器检查并允许轻松重构。 但是,它不像 LINQ to SQL 或实体框架那么重。...通过使用 DynamicMethod 生成消除 Linq 和快速属性分配来获得出色的性能。 查询语言是好的 ole SQL。 包括一个低摩擦的 SQL 构建器类,使编写内联 SQL变得更加容易。

    4.2K42

    Entity Framework 的一些性能建议

    只选择某列或某些列 有些时候,在C#里写LINQ虽然看着舒服,但性能不一定好,所以有必要做一些调整。...因为单纯声明一个linq表达式并不会立即执行SQL查询,然而一旦在后面加上ToList(),就会立即去执行。...但这时,很不幸的是,where语句中的条件并不是转换为native sql去执行的,它是在内存中筛选的。这是一个比较阴的性能问题。...再紧接其后的Count就自然而然在内存里进行了。 如果要让代码尽量去生成LINQ to SQL,有个很简单的原则,就是尽量用LINQ、Lambda表达式,这样EF才可能帮我们翻译。...Count()接受了一个lambda表达式,LINQ to SQL就能准确翻译为“SELECT COUNT”了: SELECT [GroupBy1].

    1.7K30

    【C# 基础精讲】LINQ 基础

    通过使用LINQ,您可以使用类似SQL的语法来查询各种数据源,如集合、数组、数据库等。本文将介绍LINQ的基础概念、常见的LINQ操作和示例,以及如何在C#中利用LINQ进行数据查询和处理。 1....通过LINQ,您可以在代码中编写查询表达式,而不必关心底层数据源的结构。...LINQ提供了以下主要组件: 查询表达式(Query Expression):使用类似SQL的语法编写查询,以从数据源中检索所需的数据。...这意味着您可以在查询中定义多个操作,而不必担心性能问题。 3....通过使用查询表达式或方法语法,您可以在代码中轻松地进行数据过滤、排序、分组、连接和聚合等操作。利用LINQ,您可以写出更具可读性和维护性的代码,从而提高开发效率和代码质量。

    32130

    Entity Framework Plus: 让 EF Core 开发如虎添翼

    通过提供一系列实用的功能,如批量操作、查询缓存、查询延迟、LINQ动态、审计跟踪等,使得使用 Entity Framework 进行数据库开发变得更加高效和灵活。...查询延迟:允许延迟查询的执行,以便在需要时结合其他功能(如查询缓存和查询未来)一起执行。 查询过滤:支持在全局、实例或查询级别上应用过滤条件,以便在检索数据时自动应用这些条件。...查询未来:允许将多个查询合并到单个数据库往返中,从而减少数据库往返次数,提高性能。...支持多个版本的 Entity Framework:EntityFramework-Plus 支持 Entity Framework 5(EF5)、Entity Framework 6(EF6)和 Entity...ctx.Users.Where(x => x.LastLoginDate < date) .Delete(x => x.BatchSize = 1000); 批量更新 如果需要更新具有相同表达式的数百或数千个实体

    18910

    .NET中那些所谓的新语法之四:标准查询运算符与LINQ

    开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ。...标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作...在实际的开发中,我们往往会使用一些ORM框架例如EF去操作数据库,Where方法的使用则是每次调用都只是在后续生成SQL语句时增加一个查询条件,EF无法确定本次查询是否已经添加结束,所以没有办法木有办法在每个...与延迟加载相对应,在开发中如果使用FindAll方法,EF会根据方法中的条件自动生成SQL语句,然后立即与数据库进行交互获取查询结果,并加载到内存中去。...p;   (1)LINQ表达式以"from"开始,以"select 或 group by子句"结尾;   (2)LINQ表达式的输出是一个 IEnumerable 或 IQueryable

    2.1K30

    C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法

    因此,即使在开始编写 LINQ查询时,熟悉如何在查询和查询表达式本身中使用方法语法也十分有用。...但是,如果在 Visual Studio IDE 中调用 IntelliSense 完成列表,则不仅会看到 Where 方法,还会看到许多其他方法(如 Select、SelectMany、Join 和...某些 LINQ 提供程序(如 LINQ to SQL 和 LINQ to XML),会实现自己的标准查询运算符,并为 IEnumerable 之外的其他类型实现额外的扩展方法。...Lambda 的主体与查询语法中或任何其他 C# 表达式或语句中的表达式完全相同;它可以包含方法调用和其他复杂逻辑。 “返回值”就是表达式结果。 若要开始使用 LINQ,不必大量使用 lambda。...有关详细信息,请参阅 Lambda 表达式。 查询的可组合性 在前面的代码示例中,请注意,OrderBy 方法通过对 Where 调用使用点运算符来调用。

    3.9K20

    用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记

    2,Linq2Sql&EF:   2008年,随着.NET 3.5和VS2008发布,MS的官方ORM框架Linq2Sql也一同发布了,它采用Linq语法来查询数据库,也就是说Linq是MS的ORM查询...但是,LINQ to SQL是一个不再更新的技术。其有很多不足之处,如,不能灵活的定义对象模型与数据表之间的映射、无法扩展提供程序只能支持SQL Server等。...2.2,表达式树 有关表达式树的问题,我摘引下别人文章中的段落,原文在《表达式即编译器》: 微软在.NET 3.5中引入了LINQ。...在LINQ to Object中,Where方法接受一个Func类型的参数——它是一个根据某个对象(T)返回true(表示包含该对象)或false(表示排除该对象)的委托。...文件嵌入的程序集名称和资源名称,如果有多个SQL-MAP文件建议在此指明。

    4.2K90

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    (代码在最后)    补充:   最后必须让初学者理解一个知识点:分部类 partial 关键字,因为我们的重构是围绕分部类而实现,包括接口 partial 关键字指示可在命名空间中定义该类、结构或接口的其他部分...各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。...中的原来代码变为: using Apps.Models; using System.Linq; namespace Apps.IDAL { public interface ISysSampleRepository...重构后的架构(VS2013)执行根目录下的script.sql脚本。...并修改web.config数据库链接即可查看 如查看重构前代码可以到第一节下载17节代码 https://yunpan.cn/cYUdjssbmiLrL  提取码 e622 ?

    1.9K60

    走进 LINQ 的世界

    支持 IEnumerable 或派生接口(如泛型 IQueryable)的类型称为可查询类型。   可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...(如果您熟悉 SQL,您会注意到这些子句的顺序与 SQL 中的顺序相反。) from 子句指定数据源, where 子句指定应用筛选器, select 子句指定返回的元素的类型。...在 LINQ 中,您不必像在 SQL 中那样频繁使用 join,因为 LINQ 中的外键在对象模型中表示为包含项集合的属性。...若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。...lambda 表达式与查询语法中的表达式或任何其他 C# 表达式或语句中的表达式相同;它可以包括方法调用和其他复杂逻辑。“返回值”就是表达式结果。

    4.6K30

    LinQ 查询表达式

    LINQ 最明显的”语言集成”部分就是查询表达式。 使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档以及 .NET 集合中的数据。...还可以使用 into 关键字,使 join 或 group 子句的结果可以充当相同查询表达式中的其他查询子句的源。 查询变量 在 LINQ 中,查询变量是存储查询而不是查询结果的任何变量。...任何可选子句都可以在查询正文中使用零次或多次。 where 子句 使用 where 子句可基于一个或多个谓词表达式,从源数据中筛选出元素。...join 子句 使用 join 子句可基于每个元素中指定的键之间的相等比较,将一个数据源中的元素与另一个数据源中的元素进行关联和/或合并。在 LINQ 中,联接操作是对元素属于不同类型的对象序列执行。...let 子句 使用 let 子句可将表达式(如方法调用)的结果存储在新范围变量中。

    1.9K20

    C#的查询语法和方法语法

    在C#中,语言集成查询(LINQ)是一种强大的编程范式,它允许开发者使用查询语法或方法语法来操作数据。LINQ查询可以应用于数组、列表、数据库以及其他数据源,使得数据操作更加直观和简洁。...1.3 LINQ的特点类型安全:LINQ查询在编译时检查类型安全。表达力:LINQ提供了丰富的操作符和方法来处理数据。可组合:LINQ查询可以组合使用,提供强大的数据处理能力。2....num;2.2 方法语法的实现方法语法使用Enumerable类的方法,如Where、Select等。...LINQ查询的高级特性3.1 联接操作LINQ支持对数据源进行联接操作,类似于SQL中的JOIN。...提供的标准查询运算符标准查询运算符提供了一组预定义的方法,如Where、Select、OrderBy等。

    2.3K00
    领券