`

Entity Framework 学习总结之八:EntitySQL 复杂查询及函数

 
阅读更多

复杂查询及函数

外键

Entity SQL 与其它的查询一样,可以通过外键的关系直接取值或判断,如:

using (var edm = new NorthwindEntities ())

{

    string sqlStr = "SELECT VALUE o FROM NorthwindEntities.Orders AS o WHERE o.Customers.Country = 'Mexico'" ;

 

    ObjectQuery <Orders > query = edm.CreateQuery<Orders >(sqlStr);

    ObjectResult <Orders > result = query.Execute(MergeOption .NoTracking);

 

 

    foreach (Orders o in result)

    {

        Console .WriteLine("{0},{1}" , o.OrderID, o.Customers.Address);

    }

 

    Console .WriteLine(query.ToTraceString());

}

 

我们直接用 o.Customers.Country 这是一个一对多的外键关系。

 

注: NorthwindEntities.Orders 中的 NorthwindEntities 可以省略的!

 

GroupBy

对数据进行分组查询可以使用以下语法:

SELECT o . OrderDate , Count ( o . OrderID ) AS Count FROM NorthwindEntities . Orders AS o GROUP BY o . OrderDate

直接进行 Group by 操作,而进行分组时也可以使用 Count Max Min Sum Avg 这几个函数,使用方法与 SQL 没有什么不同。

 

统计函数

Entity SQL 同样支持统计函数: Avg BigCount,Count,Max,Min,StDev,Sum

 

类型转换

Null 文本与 Entity SQL 类型系统中的任何类型都兼容,可以使用 cast 进行类型转换,例如:

SELECT Length ( cast (e . Notes as string) ) from NorthwindEntities . Employees as e where e . EmployeeID = 1

 

其中, Nvarchar 等可以成 string ,数字类型可以转成 int32 ,其他的类型转换类似。如果无法完成转换,则将报异常。

 

字符串函数

我们先查询出一个字符串供下面函数演示使用:

SELECT e.Notes from NorthwindEntities . Employees as e where e.EmployeeID=1

 

-- 结果: Education includes a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International.

 

IndexOf 获取前面字符串在后面字符串中的位置。

SELECT IndexOf ( 'i' , e . Notes ) from NorthwindEntities . Employees as e where e . EmployeeID = 1

-- 结果: 7

 

Right 获取前面字符串从右面的 N 个字符,注意字符串必须要转换。
SELECT Right ( cast (e.Notes as string) ,14) from NorthwindEntities . Employees as e where e.EmployeeID=1

-- 结果: International.

 

Left 同上

 

Length 获取字符串长度。

SELECT Length ( cast (e . Notes as string) ) from NorthwindEntities . Employees as e where e . EmployeeID = 1

-- 结果: 175

 

SUBSTRING 截取字符串,从字符串中 A 开始截取长度为 B 个字符。

SELECT SUBSTRING ( e.Notes,2,10 ) from NorthwindEntities . Employees as e where e . EmployeeID = 1

-- 结果: ducation i

 

LTrim RTrim Trim 分别为删除字符串左、右、两侧空格。

SELECT Trim ( SUBSTRING ( e.Notes,2,9 )) from NorthwindEntities . Employees as e where e . EmployeeID = 1

-- 结果: ducation

 

Replace 将字符串参数 A 中的字符串参数 B 替换为字符串参数 C

SELECT Replace ( cast (e.Notes as string), 'includes' , 'Astar' ) from NorthwindEntities . Employees as e where e . EmployeeID = 1

-- 结果: Education Astar a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International.

 

ToLower ToUpper 大小写转换。

 

Reverse 将字符串反转。

SELECT Reverse ( cast (e.Notes as string) ) from NorthwindEntities . Employees as e where e . EmployeeID = 1

-- 结果: .lanoitanretnI sretsamtsaoT fo rebmem a si ycnaN ".llaC dloC eht fo trA ehT" detelpmoc osla ehS .0791 ni ytisrevinU etatS odaroloC morf ygolohcysp ni AB a sedulcni noitacudE

 

数字函数

四舍五入: Round(1.4)

向下取整: Floor(1.9) >> 1

向上取整: Ceiling(1.1) >> 2

 

时间函数

当前时间: CurrentDateTime() >> 2011/1/6 20:34:09

格林威治时间: CurrentUtcDateTime()

年、月、日、时、分、秒: Year(e.BirthDate),Month(e.BirthDate),Day(e.BirthDate),Hour(e.BirthDate),Minute(e.BirthDate),Second(e.BirthDate)

 

GUID NewGuid () >>4131d481-2291-4fe9-8756-6e2b1d99f607

 

位计算函数

如果提供 Null 输入,则这些函数返回 Null 。这些函数的返回类型与参数类型相同。如果函数采用多个参数,则这些参数必须具有相同的类型。若要对不同类型执行位运算,则需要显式强制转换为相同类型。( BitWiseAnd,BitWiseNot,BitWiseOr,BitWiseXo

 

集合运算符

Set(Colleciton) :我们假定 Collection 中可以包含重复元素,那么, Set(Collection) 就取出 Collection 中的非重复的元素。

例如: Set({1,1,3,3,4}) 将得到结果 {1,3,4}

 

e IN collection IN 运算符返回 e 是否在 collection 中。

例如: 1 IN {1,2,3} 返回 TRUE 1 IN {-1,-2,-3} 返回 FALSE

 

EXISTS(collection) :判定 collection 是否为空,为空时返回 FALSE ,否则,返回 TRUE

例如: EXISTS({1}) 返回 TRUE ;而 EXISTS(SELECT V from {1,2,3} AS V WHERE V=-1) 返回 FALSE

 

collectionA UNION [ALL] collection UNION 求两个集合的并集,并且去除相同的元素;而 UNION ALL 求两个集合并集,但是,同时包含重复元素。

例如: {1,2,3} UNION {2,3,4} 得到 {1,2,3,4} ,而 {1,2,3} UNION ALL {2,3,4} 得到 {1,2,3,2,3,4}

 

collecitonA INTERSECT collectionB INTERSECT 求两个集合的交集。

例如: {1,2,3} INTERSECT {2,3} 得到 {2,3} 。注意,交集会去除重复元素。 {1,2,2,3} INTERSECT {2,2,3} 得到 {2,3} ,而非 {2,2,3}

 

collecitonA EXCEPT collecitonB A EXCEPT B 代表:从 A 集合里减去 B 集合的元素。换句话说,就是取得 A 中有 B 中没有的元素。

例如: {1,2,3} EXCEPT {2,3} 将得到 {1}

 

collecitonA OVERLAPS collectionB A OVERLAPS B 将判定 A B 集合是否有交集,有则返回 TRUE ,没有则返回 FALSE 。其相当于 EXISTS(A INTERSECT B)

例如: {1,2,3} OVERLAPS {3,4} 返回 TRUE ,而 {1,2,3} OVERLAPS {4,5} 返回 FALSE

 

ANYELEMENT(collection) ANYELEMENT 随机返回集合中的任意一个元素。

例如: ANYELEMENT({1,2,3}) 有可能返回 1 ,有可能返回 2 也有可能返回 3

分享到:
评论

相关推荐

    Entity Framework技术系列之7:LINQ to Entities.pdf

    - **查询优化**:Entity Framework能够智能地优化查询语句,将其转化为高效的SQL语句。 - **类型安全**:使用LINQ to Entities进行查询时,编译器会在编译时检查语法错误,提高了程序的健壮性。 #### 四、总结 LINQ...

    EntityFramework.SqlServer_EntityFramework_

    标题中的`EntityFramework.SqlServer_EntityFramework_`可能是指这个项目或库是关于Entity Framework与SQL Server数据库交互的一个部分,可能是对原生EF的增强或者封装,目的是为了简化和优化SQL Server的数据操作。...

    Entity Framework学习笔记

    本篇学习笔记主要关注的是Entity SQL(E-SQL),这是EF提供的一种结构化查询语言,类似于标准的SQL,但设计用于与EF一起工作。E-SQL并不支持直接的Insert、Update、Delete操作,这意味着开发者不能像在常规SQL中那样...

    Entity Framework 学习

    Entity Framework(EF)是Microsoft开发的一个对象关系映射(ORM)框架,用于.NET应用程序,它允许开发者使用.NET语言(如C#或VB.NET)来操作数据库,而无需编写大量的SQL语句。通过EF,开发者可以将数据库操作抽象...

    Entity Framework官方中文教程

    为了适应不同应用场景,Entity Framework Core提供了多个.NET实现的支持,并详细描述了不同的数据库提供程序(如Microsoft SQL Server、SQLite、内存优化表InMemory),以及如何编写自定义的数据库提供程序。...

    Entity Framework学习材料

    Entity Framework(EF)是ADO.NET框架中用于构建数据驱动的应用程序的一项技术。它提供了一种抽象的方式来处理数据库,允许开发者使用对象-关系映射(ORM)方式与数据交互,而不是直接编写SQL语句。EF的核心是实体...

    ado.net entity framework extension

    扩展可以提供更强大的查询工具,如动态SQL生成,或者支持更复杂的聚合和分析函数。 7. **数据库兼容性**:Entity Framework原生支持多种数据库,但可能无法满足所有特定数据库供应商的功能。扩展可以提供针对特定...

    Entity Framework 教程

    9. **Entity Framework的原理及使用方式**:这部分内容总结了Entity Framework的工作原理,并提供了多种使用方式的对比和建议。 10. **使用技巧及需要注意的问题**:分享了一些实用的使用技巧和注意事项,帮助...

    ADO.NET Entity Framework

    ADO.NET Entity Framework 是微软开发的一种ORM(对象关系映射)框架,它允许开发者使用.NET语言(如C#或VB.NET)来操作数据库,而无需直接编写SQL语句。这个框架的核心概念是实体数据模型(Entity Data Model,EDM...

    EntityFramework 帮助文档

    此外,还介绍了使用原始SQL查询和数据库函数的方法,并且说明了如何应用全局查询筛选器和查询标记。 保存数据章节讲解了如何进行基本的保存操作,如何处理并发冲突,以及如何使用事务来保证数据的完整性。还涉及到...

    EntityFramework.Functions:EntityFramework.Functions库实现对存储过程(具有单个结果类型,多个结果类型,输出参数),表值函数(返回实体类型,复杂类型),标量值函数(可组合,不可组合)的实体框架代码优先支持),集合函数,内置函数,尼拉第函数和模型定义的函数

    EntityFramework.Functions EntityFramework.Functions库实现对以下对象的代码优先支持: 存储过程,具有: 单一结果类型 多种结果类型 输出参数 表值函数,返回 实体类型 复杂类型 标量值函数 可组合的 不可组合...

    entity framework

    【Entity Framework】是微软开发的一款面向对象的ORM(Object-Relational Mapping)框架,它允许开发者使用.NET编程语言(如C#或VB.NET)来操作数据库,而无需关注底层的SQL语句。这篇教程旨在帮助学习者掌握EF的核心...

    Packt.Entity.Framework.4.1.Expert's.Cookbook.2012

    9. **复杂查询与聚合函数**:介绍如何使用Linq to Entities执行复杂的查询,包括分组、排序、联接和聚合函数,如Sum、Count、Average等。 10. **异常处理与事务**:讲解如何处理Entity Framework操作中可能出现的...

    EntityFramework之增删改

    EntityFramework(简称EF)是微软提供的一款开源对象关系映射(ORM)框架,它使得.NET开发者可以使用面向对象的方式来操作数据库,而无需关心底层的SQL语句。在本项目"EntityFramework之增删改"中,我们将深入探讨...

    Entity Framework 6.0 源码

    4. **查询表达力增强**:Linq to Entities在EF 6.0中得到扩展,支持更多的SQL函数和操作,使得在C#代码中构建复杂的查询更为方便。 5. **扩展性**:开源后,EF 6.0的扩展性得到了显著增强,开发者可以自定义策略,...

    ADO.NET Entity Framework 教程

    除了通过 LINQ 查询之外,Entity Framework 还支持使用原始 SQL 查询和存储过程等方式操作数据。这对于需要执行复杂查询或调用数据库特定功能的场景非常有用。 #### 为什么要使用 Entity Framework - **提高生产力*...

    Programming Entity Framework

    - **EntitySQL概述**:一种类似于SQL的查询语言,用于直接编写查询表达式。 **3.5 使用方法进行查询** - **方法使用**:除了LINQ和EntitySQL之外,还可以使用ObjectQuery和ObjectSet等方法进行数据查询。 - **示例...

    Beginning.Entity.Framework.Core.2.0(英文版含源码)

    《 Beginning.Entity.Framework.Core.2.0 (英文版含源码)》是一本专注于介绍Entity ...通过对这些知识点的学习,开发者可以熟练地使用Entity Framework Core 2.0进行数据访问,提高开发效率并降低数据库操作的复杂性。

Global site tag (gtag.js) - Google Analytics