EF(ObjectQuery)查询与方法详解
需积分: 11 16 浏览量
更新于2024-09-16
收藏 56KB DOC 举报
"EF_ObjectQuery查询及方法"
在Entity Framework(EF)中,`ObjectQuery` 类是用来执行针对实体数据模型(EDM)的查询的。它不仅支持使用LINQ to Entities进行查询,还允许直接使用Entity SQL语言来构建查询语句。`ObjectQuery` 提供了一系列的查询生成器方法,这些方法有助于构建复杂的查询表达式,它们等价于Entity SQL语句。以下是一些主要的查询生成器方法及其对应的Entity SQL语句:
1. `Distinct` - 去除结果集中的重复项。
2. `Except` - 返回在第一个集合中但不在第二个集合中的元素。
3. `GroupBy` - 根据一个或多个键对元素进行分组。
4. `Intersect` - 返回两个集合的交集。
5. `OfType<T>` - 仅包含可转换为指定类型的元素。
6. `OrderBy` 和 `OrderByDescending` - 按照指定的排序顺序排列元素。
7. `Select` 和 `SelectValue` - 将源集合中的每个元素映射到新的形式或值。
8. `Skip` - 跳过集合中的前n个元素。
9. `Top` - 从集合中选取前n个元素。
10. `Union` 和 `UnionAll` - 合并两个集合,并去除重复项(`UnionAll` 不去除重复项)。
11. `Where` - 过滤满足指定条件的元素。
以下是一个使用`ObjectQuery`的示例代码,展示了如何执行Entity SQL查询并处理结果:
```csharp
using (var edm = new NorthwindEntities())
{
string esql = "SELECT VALUE c FROM NorthwindEntities.Customers AS c ORDER BY c.CustomerID LIMIT 10";
ObjectQuery<Customers> query = edm.CreateQuery<Customers>(esql);
ObjectResult<Customers> results = query.Execute(MergeOption.NoTracking);
Assert.AreEqual(results.Count(), 10);
foreach (Customers c in query)
Console.WriteLine(c.CustomerID);
}
```
在上述代码中,`CreateQuery` 方法用于创建一个`ObjectQuery`实例,执行Entity SQL查询。`Execute` 方法则用于执行查询并返回结果。`MergeOption` 参数是一个枚举类型,用于控制如何合并查询结果与现有实体。`MergeOption`有四个可能的值:
1. `AppendOnly` - 只添加新的实体,不更新已存在的实体,这是默认行为。
2. `OverwriteChanges` - 会用服务器上的数据覆盖本地实体的当前值,这可能会覆盖本地所做的任何更改。
3. `PreserveChanges` - 保留本地的更改,只替换原始值,用于在并发冲突后保持本地更改。
4. `NoTracking` - 不追踪实体状态,不维护关系,可以提高性能,但不适合需要进行状态管理的情况。
通过灵活运用这些方法和选项,开发者可以根据需求构建高效、复杂的数据查询逻辑,以适应不同的业务场景。
119 浏览量
332 浏览量
2012-11-29 上传
220 浏览量
121 浏览量
137 浏览量
2012-05-26 上传
325 浏览量
517 浏览量
mycar2008
- 粉丝: 1
- 资源: 4
最新资源
- 电路板级的电磁兼容设计
- 计算机常用术语英汉互译
- Oracle 程序员开发指南
- 开发项目管理PPT,Project+Management+Of+RD
- Hacker Defender ROOKIT木马检测工具源码
- 3DGame.pdf
- ARM GEC2410实战手册
- 2 小时玩转 iptables 企业版 v1.5.4
- Apache2_httpd.conf_中文版
- Oracle DBA 心得
- Lucene in Action 中文版(PDF)
- IBM首席技术专家选择智慧的地球-IBM中国研究院院长李实恭博士
- JSF快速入门,简单应用
- Java的验证表单大全。
- GDB使用手册,初学者使用
- ajax开发简略,ajax的简略介绍及说明。