eSql语法学习资料
比起 LINQ to SQL,EF 除了提供 LINQ 查询方式, 还提供了 Entity SQL language ESQL 类似 Hibernate 的 HSQL,ESQL 与SQL 语言的语法相似,以字符串的方式执行 ### eSql语法学习资料 #### 一、简介 在.NET框架中,Entity Framework(简称EF)不仅支持LINQ to SQL的查询方式,还提供了一种称为Entity SQL (ESQL)的语言来实现数据查询。ESQL类似于Hibernate中的HSQL,其语法与标准SQL非常相似,但又针对Entity Framework进行了优化和扩展。ESQL主要通过字符串形式来执行查询,这为开发者提供了更加灵活的方式来操作数据库。 #### 二、ESQL查询结果集:`ObjectQuery` `ObjectQuery`是EF中用于表示ESQL查询结果的类。它可以根据不同的需求返回不同类型的结果集,如实体对象、数据库记录或简单类型等。 ##### 2.1 `ObjectQuery<实体>` 当查询结果期望返回实体类型时,可以使用`ObjectQuery<T>`,其中`T`是具体的实体类型。例如: ```csharp var context = new myContext(); string esql = "SELECT VALUE DBItemList FROM myContext.DBItemList"; var query = context.CreateQuery<DBItemList>(esql); foreach (var r in query) { Console.WriteLine(r.NameID); } ``` 在这个例子中,`DBItemList`是一个实体类型,`CreateQuery<DBItemList>(esql)`创建了一个`ObjectQuery<DBItemList>`实例,用于执行ESQL查询并返回`DBItemList`类型的对象列表。 ##### 2.2 `ObjectQuery<DbDataRecord>` 如果查询结果需要以数据库记录的形式返回,可以使用`ObjectQuery<DbDataRecord>`。例如: ```csharp var context = new myContext(); string esql = "SELECT it.NameID FROM myContext.DBItemList as it"; var query = context.CreateQuery<DbDataRecord>(esql); foreach (var r in query) { Console.WriteLine(r["NameID"]); } ``` 在这个示例中,`DbDataRecord`是一种通用的数据记录类型,可以用来存储任何类型的数据列。 ##### 2.3 `ObjectQuery<简单类型>` 对于只包含简单类型(如整数、字符串等)的查询结果,可以使用`ObjectQuery<T>`,其中`T`是简单的数据类型。例如: ```csharp var context = new myContext(); string esql = "SELECT it.NameID FROM myContext.DBItemList as it"; var query = context.CreateQuery<int>(esql); foreach (var r in query) { Console.WriteLine(r); } ``` 这里,`CreateQuery<int>(esql)`将创建一个`ObjectQuery<int>`实例,用于执行ESQL查询并返回整数类型的值列表。 #### 三、ESQL的关键字和语法 ESQL中有多个关键字和语法元素,它们可以帮助构建复杂的查询。 ##### 3.1 `it`关键字 `it`关键字用于引用查询中的当前行或实体。例如: ```csharp SELECT it.NameID FROM myContext.DBItemList as it ``` 这里,`it`代表`DBItemList`表中的每一项。 ##### 3.2 `value`关键字 `value`关键字用于指定查询结果中返回的具体值。例如: ```csharp SELECT VALUE it.NameID FROM myContext.DBItemList as it ``` 使用`value`关键字后,查询结果只包含`NameID`这一列。 ##### 3.3 查询参数的使用 在ESQL中可以通过参数化查询来避免SQL注入攻击。例如: ```csharp string esql = "SELECT it.NameID FROM myContext.DBItemList as it WHERE it.ID = @0"; var query = context.CreateQuery<int>(esql, 123); foreach (var r in query) { Console.WriteLine(r); } ``` 这里,`@0`是一个参数占位符,实际执行时会被后面的`123`替换。 ##### 3.4 中文字段 ESQL支持中文字段名,但需要注意编码问题。例如: ```csharp string esql = "SELECT it.名称 FROM myContext.DBItemList as it"; ``` #### 四、获取ESQL与SQL字符串 有时候我们需要查看或修改ESQL查询语句本身,这时可以使用以下两种方式: ##### 4.1 `CommandText`属性 `ObjectQuery`对象有一个`CommandText`属性,可以获取到实际的ESQL查询语句。 ```csharp var commandText = query.CommandText; ``` ##### 4.2 `ToTraceString`方法 `ToTraceString`方法可以获取到转换成SQL的查询语句,这对于调试和优化非常有用。 ```csharp var sql = query.ToTraceString(); ``` #### 五、`ObjectQuery`的Linq方法 `ObjectQuery`还支持一系列Linq方法,用于进一步处理查询结果。 ##### 5.1 `Where` 过滤查询结果中的项。 ##### 5.2 `OrderBy` 根据指定字段排序。 ##### 5.3 `Select` 选择查询结果中的某些列。 ##### 5.4 `SelectValue(projection)` 选择特定值。 ##### 5.5 `Top(count)` 获取查询结果中的前N个项。 ##### 5.6 `Skip(keys,count)` 跳过查询结果中的前N个项。 ##### 5.7 分页:`SkipTop` 结合`Skip`和`Top`实现分页功能。 ##### 5.8 `GroupBy(keys,projection)` 按某个字段进行分组。 ##### 5.9 `Include(path)` 加载关联实体。 #### 六、ESQL语法细节 ESQL还有许多其他的语法细节,包括注释、成员访问、运算符、函数等。 ##### 6.1 注释 使用`--`添加单行注释。 ##### 6.2 成员访问 使用`.`操作符来访问实体的属性。 ##### 6.3 分行 使用`|`来进行分行。 #### 七、ESQL运算符 ESQL支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。 ##### 7.1 算术运算符 `+`, `-`, `*`, `/`, `%`等。 ##### 7.2 比较运算符 `=`, `!=`, `<`, `<=`, `>`, `>=`等。 ##### 7.3 逻辑运算符 `AND`, `OR`, `NOT`等。 ##### 7.4 区间 `BETWEEN`用于指定范围内的值。 ##### 7.5 集合运算 `IN`, `EXISTS`等。 #### 八、ESQL函数 ESQL支持丰富的内置函数,包括统计类、数学类、日期类、字符类等。 ##### 8.1 统计类 `COUNT`, `SUM`, `AVG`, `MIN`, `MAX`等。 ##### 8.2 数学类 `ABS`, `CEILING`, `FLOOR`, `ROUND`等。 ##### 8.3 日期 `DATEADD`, `DATEDIFF`, `GETDATE`等。 ##### 8.4 字符 `CONCAT`, `SUBSTRING`, `UPPER`, `LOWER`等。 #### 九、ESQL语句 除了基本的查询语句外,ESQL还支持其他类型的语句,如`CASE`语句等。 ##### 9.1 查询语句 基本的查询语法结构。 ##### 9.2 CASE语句 根据条件返回不同的值。 #### 十、ESQL类型 ESQL支持多种类型,包括简单类型、引用类型、行类型、集合类型等。 ##### 10.1 简单类型 如整数、浮点数、字符串等。 ##### 10.2 REF 用于引用其他实体。 ##### 10.3 ROW 用于组合多个字段。 ##### 10.4 集合 如数组、列表等。 ##### 10.5 Object返回对象 返回整个实体对象。 ##### 10.6 CAST类型转换 将一种类型转换为另一种类型。 ##### 10.7 OFTYPE 判断对象是否属于某种类型。 ##### 10.8 TREAT 类似CAST,但不会引发异常。 ##### 10.9 IS类型判断 判断对象是否为某种类型。 #### 十一、ESQL Namespace ESQL支持命名空间,可以在查询中使用其他命名空间中的函数和类型。 ##### 11.1 使用SqlServer函数 调用SQL Server的内置函数。 ##### 11.2 使用.NET的数据类型 在查询中使用.NET框架提供的类型。 #### 十二、ESQL关系与导航 ESQL还支持关系和导航特性,允许在查询中方便地处理实体之间的关系。 ##### 12.1 KEY 指定实体的主键。 ESQL作为一种强大的查询语言,在Entity Framework中提供了高度灵活性和扩展性。通过掌握上述知识点,开发人员可以更好地利用ESQL来提高数据操作效率和程序性能。
- whwqs2013-01-25不错,是我需要的,不过如果是chm格式,就更好了
- fred_ygs2016-04-26并没有E-SQL join相关的多表数据库的操作呢?
- 粉丝: 3
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助