`

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

分享到:
评论

相关推荐

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

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

    functions-csharp-entityframeworkcore:结合使用依赖注入和Azure实体框架的C#函数

    C#函数,该函数将依赖项注入和实体框架核心与Azure SQL结合使用。 注意事项: 我想使用设计优先的迁移方式,所以我为工具创建了一个IDesignTimeDbContextFactory来生成正确的DbContext 。 我还必须在.csproj文件...

    ASP.NET Entity Framework(EF)中基本增删改查的各种写法和详细说明

    在以前学习和使用WinForm、ASP.NET WebForm、三层架构的时候,对于数据访问的实现,无论是什么逻辑,简单还是复杂,无论是执行SQL语句还是调用存储过程都要用到ADO.NET技术,通过封装好的SQLhelper类传入SQL语句和Sql...

    Nfine-Mvc5.zip

    1、原版NFine框架经过修改,由Ms SqlServer数据库改成MySQL数据库,去掉原版的后门连接...2、数据库驱动采用EF6的MySql.Data.EntityFramework 和MySql.Data版本:8.0.13.0, 3、在VS2017和.NET Framework 4.72下编译通过

    NFine快速开发框架Mysql版去后门

    1、原版NFine框架经过修改,由Ms SqlServer数据库改成MySQL数据库,去掉原版的后门连接...2、数据库驱动采用EF6的MySql.Data.EntityFramework 和MySql.Data版本:8.0.13.0, 3、在VS2017和.NET Framework 4.72下编译通过

    空间数据的转换与处理

    投影变换、数据格式转换、数据裁切、拼接等内容分别简单介绍

    第24次课-1 Spring与Hibernate的整合

    另外,从Spring 2.0开始增加了对命名SQL查询的支持,也增加了对分页的支持。 24.3 Spring对Hibernate的简化 24.3.3 HibernateTemplate的常用方法 void delete(Object entity):删除指定的持久化实例 void delete...

    sqlsharpener:解析SQL文件以创建一个元对象层次结构,您可以使用该层次结构生成C#代码,例如存储过程包装

    SqlSharpener通过解析SQL文件以创建一个元对象层次结构来实现此目的,通过该元对象层次结构可以生成C#代码,例如存储过程包装程序或Entity Framework Code-First实体。 您可以手动执行此操作,也可以通过调用其中...

    支持多数据库的ORM框架ef-orm.zip

    对于各种常用SQL函数和运算符,都可以自动转换为当前数据库支持的方言来操作。其函数支持也要多于HQL支持的函数。 阅读推荐:第7、8章 特点三,可能是业界最快的ORM框架. 得益于ASM的动态代码生成技术,部分耗时...

    LINQ 实战 1/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    asp.net知识库

    SQL server 2005中新增的排序函数及应用 根据基本表结构及其数据生成 INSERT ... 的 SQL 简便的MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本的存储过程 直接从SQL语句问题贴子数据建表并生成建表语句的...

    LINQ 实战 3/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 4/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 2/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 7/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 11/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 5/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 6/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 8/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

    LINQ 实战 10/11

    13.7.4 LINQ to Entities,ADO.NET Entity Framework的LINQ接口 383 13.8 小结 384 第14章 使用LINQ操作DataSet 385 14.1 LINQ to DataSet概览 385 14.2 DataSet回顾 386 14.2.1 DataSet使用场景及功能...

Global site tag (gtag.js) - Google Analytics