`

Entity Framework 学习总结之七:EntitySQL 基本查询

 
阅读更多

Entity SQL 基本查询

SWFGHO 是什么? SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY 的首字母缩写,也是 SQL 查询语句的最基本构成方法。 Entity SQL 是一种 " 仿 SQL" 的语言,因此,它在基本遵守 SFWGHO 的基础上,稍微加以扩展,形成了一套较 SQL 来得强大的查询语句。

 

表达式

Entity SQL 提供了一种最简单的查询方法 —— 表达式。一个表达式即一个查询语句。

 

举例说明,以下表达式均可以看作是 Entity SQL 的查询语句 ( 每行一个 )

1

1*2%3

MAX({1,3,4})

CASE WHEN MIN(MULTISET(-3,1,9))<0 THEN -100 ELSE 100 END

SUBSTRING('Hello',2,3)

 

正常的 Entity SQL 写法,例如:

select e from NorthwindEntities . Employees as e

select e .Address, e .City from NorthwindEntities . Employees as e order by e .City

 

结果:

 

注意:

·    不支持 SELECT * 操作,必须要 SELECT 列或者实体的别名。

·    建议显式的使用 AS 关键字。虽然在有些情况下, Entity SQL 可以 自动推断别名 ,但有时候,就会出错。因此,显式使用 AS 来声明别名有助于减少错误。

·    不区分大小写。

·    ESQL 后面的分号可以省略。

 

操作符

Entity SQL 支持如下操作符:

优先级     作用与类型      符号

1     层级               .,()[]

2               ! not

3     乘除               * / %

4     加减               +-

5     比较               < > <= >=

6     相等               = != <>

7               and &&

8               or ||

 

标识符

Entity SQL 提供两种标识符:简单标识符和带引号的标识符。

简单标识符: Entity SQL 中的简单标识符是字母数字和下划线字符的序列。标识符的第一个字符必须是字母字符( a-z A-Z )。

带引号的标识符:带引号的标识符是括在方括号 ([]) 中的任何字符序列。带中文的部分,请使用方括号包括起来,否则会报如下异常信息: 简单标识符 中文 只能包含基本拉丁字符。若要使用 UNICODE 字符,请使用转义标识符

 

正确的代码如下: Select c . CustomerID as [ 中文字符 ] from NorthwindEntities . Customers as c order by c . CustomerID skip 0 limit 10

 

SELECT ROW SELECT VALUE

Entity SQL 中, SELECT 又可细分为 SELECT ROW SELECT VALUE 两类。如果直接写 SELECT Entity SQL 将永远返回行对象集合 —— 即使指定了只返回某一列属性。因此,如果这样写,我们会用类似以下的代码来访问数据:

using (var edm = new NorthwindEntities ())

{

    string sqlStr = "select e.Address,e.City from NorthwindEntities.Employees as e order by e.City" ;

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

    foreach (DbDataRecord rec in query.Execute(MergeOption .NoTracking))

    {

        Console .WriteLine(rec["Address"] );

    }

    Console .WriteLine(query.ToTraceString());

}

 

Entity SQL 提供了 SELECT VALUE 子句以跳过隐式行构造。 SELECT VALUE 子句中只能指定一项。在使用这样的子句时,将不会对 SELECT 子句中的项构造行包装器,并且可生成所要形状的集合。如果使用 SELECT VALUE ,就可以直接返回这个值,而不使用行来进行返回。例如:

using (var edm = new NorthwindEntities ())

{

    //VALUE 后面只能写一个。

    string sqlStr = "select VALUE e.Address from NorthwindEntities.Employees as e order by e.City" ;     

 

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

    foreach (string result in query.Execute(MergeOption .NoTracking))

    {

        Console .WriteLine(result );

    }

    Console .WriteLine(query.ToTraceString());

}

 

直接查询实体:

using (var edm = new NorthwindEntities ())

{

    string sqlStr = "select VALUE e from NorthwindEntities.Employees as e order by e.City" ;

 

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

    foreach (Employees eTemp in query.Execute(MergeOption .NoTracking))

    {

        Console .WriteLine(eTemp.Address );

    }

    Console .WriteLine(query.ToTraceString());

}

 

WHERE

代码片断:可以使用 and or 增加多条件判断。

string sqlStr = "select VALUE e from NorthwindEntities.Employees as e where e.City = 'London' " ;

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

foreach (Employees eTemp in query.Execute(MergeOption .NoTracking))

{

    Console .WriteLine(eTemp.City);

}

 

Top

SELECT 子句可以在可选的 ALL/DISTINCT 修饰符之后具有可选的 TOP 子子句。 TOP 子子句指定查询结果中将只返回第一组行。

...

string sqlStr = "select VALUE top (1) e from NorthwindEntities.Employees as e where e.City = 'London'" ;

另使用: Select top( 10 ) c . CustomerID from NorthwindEntities . Customers as c order by c . CustomerID

...

 

IN

...

string sqlStr = "select VALUE e from NorthwindEntities.Employees as e where e.City in {'London','testCity'}" ;

...

 

LIKE

...

string sqlStr = "select VALUE e from NorthwindEntities.Employees as e where e.City like '%nd%'" ;

...

 

Between And

string sqlStr = "select VALUE e from NorthwindEntities.Employees as e where e.EmployeeID between 1 and 100" ;

 

参数

代码片断:

string sqlStr = "select VALUE e from NorthwindEntities.Employees as e where e.City = @city " ;

 

ObjectParameter[] ps = { new ObjectParameter("city", "London") };

ObjectQuery <Employees > query = edm.CreateQuery<Employees >(sqlStr, ps );  

foreach (Employees eTemp in query.Execute(MergeOption .NoTracking))

{

    Console .WriteLine(eTemp.City);

}

 

Console .WriteLine(query.ToTraceString());

 

Order By (asc/desc)

...

string sqlStr = "select VALUE e from NorthwindEntities.Employees as e where e.EmployeeID between 1 and 100 order by e.EmployeeID desc" ;

...

 

SKIP/LIMIT 分页

可以通过在 ORDER BY 子句中使用 SKIP LIMIT 子句执行物理分页。若要以确定的方式执行物理分页,应使用 SKIP LIMIT 。如果您只是希望以非确定的方式限制结果中的行数,则应使用 TOP TOP SKIP/LIMIT 是互斥的。

 

CustomerID 排序,从第 2 条开始取 10 条记录:

Select value c from NorthwindEntities . Customers as c order by c . CustomerID skip 2 limit 10

 

Key

提取引用或实体表达式的键。如下 esql 语句,直接返回 Customer 表的主键:

SELECT value key( c ) FROM NorthwindEntities . Customers as c order by c . CustomerID LIMIT 10

 

CASE

TSQL 中的用法一样:

select case when c . CustomerID == 'BOLID' then true else false end from NorthwindEntities . Customers as c order by c . CustomerID limit 10

分享到:
评论

相关推荐

    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技术系列之1:数据访问技术概述

    随着.NET Framework的发展,数据访问技术也随之进化。从最初的ADO.NET,到后来出现的各种简化封装和技术革新,如SqlHelper、DAAB(Data Access Application Block)、LINQ,直至现在广泛推荐使用的Entity Framework...

    Entity Framework学习笔记

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

    Entity_Framework_学习.pdf

    - Entity SQL:一种不依赖于特定数据库的SQL方言,它直接与概念模型交互,支持EDM的特性,如继承和复杂关系。 - 查询生成器方法:提供了LINQ风格的查询方法来构造Entity SQL查询。 EF通过使用基于XML的模型和映射...

    entity framework 多表查询方式

    在本节中,我们将详细介绍 Entity Framework 中的多表查询方式,包括简单查询、查询部分字段、查询单一记录、LEFT JOIN 连接查询和 INNER JOIN 连接查询等。 简单查询 在 Entity Framework 中,可以使用 Func 形式...

    Programming Entity Framework DbContext

    在Entity Framework中,开发者可以通过使用C#等.NET语言编写数据访问代码,无需直接使用SQL语句。Code First是Entity Framework的一种开发模式,它允许开发者从编写数据模型类开始,然后通过框架的能力来生成数据库...

    entityFramework源代码

    这个压缩包“entityFramework源代码”包含的是Entity Framework 6的源码,对于想要深入理解其工作原理和实现细节的开发者来说,这是一个宝贵的资源。 Entity Framework 6的主要特点包括: 1. **Code First**:这是...

    EntityFramework.SqlServer.dll

    EntityFramework.SqlServer

    LINQ to SQL和Entity Framework对比与关联

    ### LINQ to SQL与Entity Framework对比分析 #### 一、概述 随着软件开发技术的不断发展,数据访问技术也在不断地更新换代。LINQ to SQL 和 Entity Framework 作为两种主流的对象关系映射(Object-Relational ...

    ADO.NET EntityFramework 完整版教程(从初级到高级)

    - **查询生成器方法**:允许开发者使用 LINQ 风格的语法构建复杂的 Entity SQL 查询。 #### 五、基本操作 - **增加**:使用 ObjectContext 对象创建新实体并添加到集合中。 - **更新**:通过更改实体属性值并在适当...

    EntityFramework.dll

    EntityFramework.dll是微软开发的一个强大的对象关系映射(ORM)框架——Entity Framework的核心组件,主要用于.NET应用程序中。这个4.1版本的DLL文件是Entity Framework的早期版本,它为开发者提供了一个更简单的...

    Entity Framework官方中文教程

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

    Entity Framework 学习.rar

    通过深入学习和实践Entity Framework,开发者可以更加高效地进行数据操作,减少与数据库的直接交互,提高代码的可维护性和可读性。同时,由于ORM框架的存在,开发者可以更加专注于业务逻辑,而不是数据库的细节。...

    EntityFrameworkCore.zip

    EntityFrameworkCore是一个强大的ORM(对象关系映射)框架,专为.NET Core和.NET Framework设计,由微软维护。它使得.NET开发者无需直接操作SQL语句,就能通过C#代码与数据库进行交互,极大地提高了开发效率。Entity...

    Entity Framework orm教程

    1. EntityFrameworkCore(EFCore)与EntityFramework6(EF6)的对比: - EFCore是轻量级、可扩展和跨平台的版本,专注于支持.NET Core项目。 - EF6是一个经过长时间测试的数据访问技术,功能丰富且稳定性较高。 -...

    .NET EntityFramework框架学习教程

    5. Entity SQL:与标准SQL类似,但专为Entity Framework设计,允许更灵活的查询实体数据。 6. ObjectQuery查询及方法:这部分详细讲解了如何使用ObjectQuery进行复杂的数据库查询,包括过滤、排序、分组等操作。 7. ...

    EntityFramework.zip

    总结来说,"EntityFramework.zip"中的资源很可能是关于如何在.NET环境中使用Entity Framework进行数据库操作和实体与DTO之间映射的实例和指南。对于.NET开发者来说,理解并掌握这些概念和技术对于提升开发效率和代码...

Global site tag (gtag.js) - Google Analytics