快速业务通道

LINQ学习笔记:解释查询(Interpreted Queries)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-13

解释查询(Interpreted Queries)

LINQ提供了2个平行架构:针对本地对象集合的查询(local query), 以及针对远程数据源的查询(interpreted query). 目前我们它讨论的架构都是关于本地查询的, 主要是操作那些实现了IEnumerable<>的对象集合.而Interpreted query则是用于操作那些实现了IQueryable<>的序列, Queryable类中的查询操作符会通过执行运行时被解析的表达式树得到最终结果.

(Enumerable类中的查询操作符实际上也可以和IQueryable<>序列一起工作, 但问题是结果集只能在客户机本地运行才能得到 — 也这是为什么要在Queryable类中提供另外一套查询操作符的原因.)

当前的.NET Framework提供了两个IQueryable的具体实现:

1. LINQ to SQL

2. LINQ to Entities

另外, 扩展方法AsQueryable可以针对任何可枚举的集合生成一个IQueryable的包装.

假定我们将使用以下的SQL脚本创建一个简单的customer表并且插入一些名称:

   1: create table Customer
   2:     (
   3:       ID int not null primary key,
   4:       Name varchar(30)
   5:     )
   6:     insert Customer values (1, ''James'')
   7:     insert Customer values (2, ''Daniel'')
   8:     insert Customer values (3, ''Carder'')
   9:     insert Customer values (4, ''Amy'')
  10:     insert Customer values (5, ''Joe'')

这个表被创建以后, 我们可以编写在C#代码中编写一个Interpreted的LINQ查询用于查找那些名称中包含a字符的记录, 代码如下:

   1: using System;
   2: using System.Linq;
   3: using System.Data.Linq;
   4: using System.Data.Linq.Mapping;
   5:  
   6: [Table] public class Customer
   7: {
   8:   [Column(IsPrimaryKey=true)] public int ID;
   9:   [Column]                    public string Name;
  10: }
  11:  
  12: class Test
  13: {
  14:     static void Main( )
  15:     {
  16:         var dataContext = new DataContext ("cx string... ");
  17:         Table<Customer> customers = dataContext.GetTable <Customer>( );
  18:  
  19:         IQueryable<string> query = from c in customers
  20:                         where c.Name.Contains ("a")
  21:                         orderby c.Name.Length
  22:                         select  c.Name.ToUpper( );
  23:  
  24:         foreach (string name in query)
  25:             Console.WriteLine (name);
  26:     }
  27: }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号