ObjectQuery 类支持对 实体数据模型 (EDM) 执行 LINQ to Entities 和 Entity SQL 查询。ObjectQuery 还实现了一组查询生成器方法,这些方法可用于按顺序构造等效于 Entity SQL 的查询命令。下面是 ObjectQuery 的查询生成器方法以及等效的 Entity SQL 语句:
Distinct,Except,GroupBy,Intersect,OfType,OrderBy,Select,SelectValue,Skip,Top,Union,UnionAll,Where
每个查询生成器方法返回 ObjectQuery 的一个新实例。使用这些方法可以构造查询,而查询的结果集基于前面 ObjectQuery 实例序列的操作。下面来看具体的代码片断:

> Execute方法:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query = edm.CreateQuery<Customers>(esql);
  5. ObjectResult<Customers> results = query.Execute(MergeOption.NoTracking);
  6. Assert.AreEqual(results.Count(), );
  7. foreach (Customers c in query)
  8. Console.WriteLine(c.CustomerID);
  9. }

其中需要说明的是: MergeOption这个枚举类型的参数项,MergeOption有四种值分别是:

> AppendOnly: 只追加新实体,不修改以前获取的现有实体。这是默认行为。

> OverwriteChanges: 将 ObjectStateEntry 中的当前值替换为存储区中的值。这将使用服务器上的数据重写在本地所做的更改。

> PreserveChanges: 将替换原始值,而不修改当前值。这对于在发生开放式并发异常之后强制成功保存本地值非常有用。

> NoTracking: 将不修改 ObjectStateManager,不会获取与其他对象相关联的关系,可以改善性能。

> GetResultType方法:返回查询结果的类型信息.例如:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query = edm.CreateQuery<Customers>(esql);
  5. Console.WriteLine(query.GetResultType().ToString());
  6. //输出结果为:
  7. //NorthWindModel.Customers
  8. }

> ToTraceString方法:获取当前执行的SQL语句。

> Where

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql = "select value c from NorthwindEntities.Customers as c ";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql);
  5. //使用ObjectParameter的写法
  6. query1 = query1.Where("it.CustomerId=@customerid");
  7. query1.Parameters.Add(new ObjectParameter("customerid", "ALFKI"));
  8. //也可以这样写
  9. //ObjectQuery<Customers> query2 = edm.Customers.Where("it.CustomerID='ALFKI'");
  10. foreach (var c in query1)
  11. Console.WriteLine(c.CustomerID);
  12. //显示查询执行的SQL语句
  13. Console.WriteLine(query1.ToTraceString());
  14.  
  15. }

> First/ FirstOrDefault

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query = edm.CreateQuery<Customers>(esql);
  5. Customers c1 = query.First();
  6. Customers c2 = query.FirstOrDefault();
  7. Console.WriteLine(c1.CustomerID);
  8. Assert.IsNotNull(c2);
  9. Console.WriteLine(c2.CustomerID);
  10. }

> Distinct

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql = "select value c.City from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<string> query = edm.CreateQuery<string>(esql);
  5. query = query.Distinct();
  6. foreach (string c in query)
  7. {
  8. Console.WriteLine("City {0}", c);
  9. }
  10. }

> Except:返回两个查询的差集。实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. string esql2 = "select value c from NorthwindEntities.Customers as c where c.Country='UK' order by c.CustomerID limit 10";
  6. ObjectQuery<Customers> query2 = edm.CreateQuery<Customers>(esql2);
  7. query1 = query1.Except(query2);
  8. foreach (Customers c in query1)
  9. {
  10. Console.WriteLine(c.Country);
  11. //输出:UK
  12. }
  13. }

> Intersect:返回两个查询的交集。实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. string esql2 = "select value c from NorthwindEntities.Customers as c where c.Country='UK' order by c.CustomerID limit 10";
  6. ObjectQuery<Customers> query2 = edm.CreateQuery<Customers>(esql2);
  7. query1 = query1.Intersect(query2);
  8. foreach (Customers c in query1)
  9. {
  10. Console.WriteLine(c.Country);
  11. }
  12. }

> Union/UnionAll:返回两个查询的合集,包括重复项。其中UnionAll必须是相同类型或者是可以相互转换的

> Include:可通过此方法查询出与相关的实体对象。实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c WHERE c.CustomerID ='HANAR'";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. query1 = query1.Include("Orders");
  6. foreach (Customers c in query1)
  7. {
  8. Console.WriteLine("{0},{1}", c.CustomerID, c.Orders.Count);
  9. //输出:HANAR,14
  10. }
  11.  
  12. }

> OfType: 根据制定类筛选元素创建一个新的类型。此类型是要在实体模型中已定义过的。

> OrderBy

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. query1.OrderBy("it.country asc,it.city asc");
  6. //也可以这样写
  7. //query1.OrderBy("it.country asc");
  8. //query1.OrderBy("it.city asc");
  9. foreach (Customers c in query1)
  10. {
  11. Console.WriteLine("{0},{1}", c.Country, c.City);
  12. }
  13. }

> Select

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. ObjectQuery<DbDataRecord> records = query1.Select("it.customerid,it.country");
  6. foreach (DbDataRecord c in records)
  7. {
  8. Console.WriteLine("{0},{1}", c[], c[]);
  9. }
  10. Console.WriteLine(records.ToTraceString());
  11. //SQL输出:
  12. //SELECT TOP (10)
  13. //1 AS [C1],
  14. //[Extent1].[CustomerID] AS [CustomerID],
  15. //[Extent1].[Country] AS [Country]
  16. //FROM [dbo].[Customers] AS [Extent1]
  17. //ORDER BY [Extent1].[CustomerID] ASC
  18. }

> SelectValue

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c order by c.CustomerID limit 10";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. ObjectQuery<string> records = query1.SelectValue<string>("it.customerid");
  6. foreach (string c in records)
  7. {
  8. Console.WriteLine("{0}", c);
  9. }
  10. Console.WriteLine(records.ToTraceString());
  11. //SQL输出:
  12. //SELECT TOP (10)
  13. //[Extent1].[CustomerID] AS [CustomerID]
  14. //FROM [dbo].[Customers] AS [Extent1]
  15. //ORDER BY [Extent1].[CustomerID] ASC
  16. }

> Skip/Top

实例代码如下:

  1. using (var edm = new NorthwindEntities())
  2. {
  3. string esql1 = "select value c from NorthwindEntities.Customers as c order by c.CustomerID ";
  4. ObjectQuery<Customers> query1 = edm.CreateQuery<Customers>(esql1);
  5. query1 = query1.Skip("it.customerid asc", "");
  6. query1 = query1.Top("");
  7. foreach (Customers c in query1)
  8. {
  9. Console.WriteLine("{0}", c.CustomerID);
  10. }
  11. Console.WriteLine(query1.ToTraceString());
  12. //SQL输出:
  13. //SELECT TOP (10)
  14. //[Extent1].[CustomerID] AS [CustomerID]
  15. //FROM [dbo].[Customers] AS [Extent1]
  16. //ORDER BY [Extent1].[CustomerID] ASC
  17. }

ObjectQuery查询及方法的更多相关文章

  1. EF ObjectQuery查询及方法

      string esql = "select value c from NorthwindEntities.Customers as c order by c.CustomerID lim ...

  2. Entity Framework 学习初级篇5--ObjectQuery查询及方法

    ObjectQuery 类支持对 实体数据模型 (EDM) 执行 LINQ to Entities 和 Entity SQL 查询.ObjectQuery 还实现了一组查询生成器方法,这些方法可用于按 ...

  3. SQO (标准查询运算符)方法 & Linq To Object

    #region SQO (标准查询运算符) 方法 #region Where() Find() FindAll() FirstOrDefault()等方法 static void c01where() ...

  4. Oracle 特殊字符模糊查询的方法

    最近在写DAO层的时候,遇到一个问题,就是使用like进行模糊查询时,输入下划线,无法精确查到数据,而是返回所有的数据. 这让我很好奇,百度之后才发现,原来是因为有些特殊字符需要进行转义才可以进行查询 ...

  5. SQL中对日期进行模糊查询的方法

    在我们通过SQL语句对数据库中的数据进行查询时,难免会遇到针对datetime的查询,但是因为一般情况下,输入的时间条件为年月日,所以,这种情况下,我们就要进行一下模糊查询,首先,摒弃一种投机取巧的方 ...

  6. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  7. SSH框架的多表查询(方法二)增删查改

     必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html  一:在前一个方法(http://www.cnblogs.com/zhu520/p ...

  8. eclipse F3可以查询某个方法的具体定义

    eclipse F3可以查询某个方法的具体定义

  9. ORACLE跨数据库查询的方法

    原文地址:http://blog.csdn.net/huzhenwei/article/details/2533869 本文简述了通过创建database link实现Oracle跨数据库查询的方法 ...

随机推荐

  1. Codeforces Round #311 (Div. 2) D - Vitaly and Cycle(二分图染色应用)

    http://www.cnblogs.com/wenruo/p/4959509.html 给一个图(不一定是连通图,无重边和自环),求练成一个长度为奇数的环最小需要加几条边,和加最少边的方案数. 很容 ...

  2. 取正在运行的DLL或EXE的路径

    function GetSelfPath: string;var  ModuleName: string;  i: Integer;begin  SetLength(ModuleName, 255); ...

  3. JS跨域笔记

    什么是跨域,跨域是指不同域之间相互访问,只要协议.域名.端口有任何一个不同,都被当作是不同的域. 对于端口和协议的不同,只能通过后台来解决,前台是无能为力的. 受浏览器同源策略的限制,本域的js不能操 ...

  4. Excel引用

    Excel引用 1.绝对引用  相对引用 A:A   左右拉的话会自动变为  B:B,C:C等等 $A:$A  左右拉的话仍然是A列 A$1:A1  上下拉的话,会变成A$1:A2,A$1:A3等等

  5. ConversionException: No value specified for 'Date'的解决版本

    DateConverter converter = new DateConverter(defaultValue); ConvertUtils.register(converter, java.uti ...

  6. Oracle Outline总结

    一.基本概述 Oracle Outline,中文也称为存储大纲,是最早的基于提示来控制SQL运行计划的机制.也是9i以及之前版本号唯一能够用来稳定和控制SQL运行计划的工具. outline是一个hi ...

  7. Safari浏览器Session问题

    Safari浏览器中经常出现session无法写入或同一个会话中Session ID常变动的事情.尤其以iOS7版本居多. 问题本身并不难猜,应该就是cookie无法写入引起的.奇怪的是,部分同版本的 ...

  8. bindiff 4.2使用

    要求IDA 6.8 程序1与程序2混合比较图 2---------------------------------------------------------------------------- ...

  9. day0

    /* 考前最后一天了 由于下午赶路 就放到上午发了 早晨浏览博客 上午浏览博客 感谢学弟为我写的博客233 很开心认识你们这一群人 嗯 最后一天了 就要说再见了 大家加油吧 ^ ^ */

  10. 20151214 jquery插件代码备份

    ;(function ($) { //局部性的 /*$.fn.extend({ 'nav' : function (color) { $(this).find('.nav').css({ 'list- ...