CN101438244B - 用于在编程语言中深嵌入表达式树的通用接口 - Google Patents
用于在编程语言中深嵌入表达式树的通用接口 Download PDFInfo
- Publication number
- CN101438244B CN101438244B CN2007800158742A CN200780015874A CN101438244B CN 101438244 B CN101438244 B CN 101438244B CN 2007800158742 A CN2007800158742 A CN 2007800158742A CN 200780015874 A CN200780015874 A CN 200780015874A CN 101438244 B CN101438244 B CN 101438244B
- Authority
- CN
- China
- Prior art keywords
- ienumerable
- interface
- iqueryable
- data
- mirror image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000006870 function Effects 0.000 claims abstract description 75
- 238000000034 method Methods 0.000 claims abstract description 59
- 230000009466 transformation Effects 0.000 claims description 11
- 230000001131 transforming effect Effects 0.000 claims description 11
- 238000003860 storage Methods 0.000 description 18
- 230000009471 action Effects 0.000 description 13
- 230000000712 assembly Effects 0.000 description 13
- 238000000429 assembly Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 238000004458 analytical method Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012706 support-vector machine Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 239000004606 Fillers/Extenders Substances 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 238000013481 data capture Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003455 independent Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003032 molecular docking Methods 0.000 description 1
- 238000006386 neutralization reaction Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/2438—Embedded query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
所要求保护的主题提供了方便利用嵌入式语言的显式表示来查询数据的系统和/或方法。IEnumerable组件可接收要利用IEnumerable接口和IEnumerable<T>接口中的至少一个在数据集合上采用的数据操作。镜像组件可利用对IEnumerable接口和IEnumerable<T>接口中的至少一个制作镜像的至少一个函数,通过将数据集合表示为表达式树,来提供查询数据集合的通用接口。
Description
背景
全球通信网络(例如,因特网)的出现现在使得大量数据可被访问。人们每天都访问并查询非结构化和结构化数据。非结构化数据用于创建、储存和检索报告、电子邮件、电子表格和其它类型的文档,并且由在原子级以非结构化格式储存的任何数据构成。换言之,在非结构化内容中,没有概念性定义且没有数据类型定义—在文本文档中,单词仅仅是单词。用于对非结构化数据的内容搜索的现有技术需要诸如名称等加标签的实体或应用关键字和元标签。因此,需要人类干预来帮助使得非结构化数据变得机器可读。结构化数据是具有对原子数据类型的强制合成的任何数据。结构化数据通过允许针对预定数据类型和理解的关系来进行查询和报告的技术来管理。
编程语言持续不断地演进以便于程序员指定并便于高效执行。在早期的计算机语言中,低级机器码是盛行的。采用机器码,计算机程序或构成计算机程序的指令用机器语言或汇编语言来编写并且由硬件(例如,微处理器)来执行。这些语言提供了控制计算硬件的有效手段,但是对程序员而言非常难以理解和开发复杂的逻辑。
随后,引入了提供各种抽象层的语言。因此,程序员可以用较高级源语言在较高级编写程序,该程序然后可经由编译器或解释器转换成硬件理解的较低级机器语言。程序设计的更大进步提供了附加的抽象层以允许比从前更迅速地指定更先进的编程逻辑。然而,这些进步并不是没有任何处理成本地出现的。
主流编程语言中的数据库集成的状态还有许多有待改进之处。存在许多专门的数据库编程语言,诸如xBase、T/SQL和PL/SQL,但是这些语言具有弱且可扩展性差的类型系统,有极少或没有对面向对象的编程的支持,并且需要专用的运行时环境。类似地,并不缺乏诸如C#、VB.NET、C++和Java等通用编程语言,但是这些语言中的数据访问通常是通过缺少强类型化和编译时验证的难以处理的API来发生的。另外,这些API缺少提供查询数据、数据集合等的通用接口的能力。
概述
以下呈现了本发明的简化描述以便提供对在此描述的某些方面的基本理解。本概述并不是对所要求保护的主题的全面综述。它既不旨在标识所要求保护的主题的关键或重要要素,也不描绘本发明的范围。其唯一目的是以简化的形式来介绍所要求保护的主题的一些概念,作为稍后呈现的更为详细的描述的前序部分。
本发明涉及方便创建表达式树表示以允许实现数据操作的系统和/或方法。一镜像组件可以创建允许利用通用接口IQueryable和IQueryable<T>来实现各种数据操作和/或查询的表达式树表示,其中IQueryable和IQueryable<T>对IEnumerable和IEnumerable<T>制作镜像。IEnumerable组件可以提供特别地对数据集合工作并且具有特定且刚性特性的通用集合类型。另外,IEnumerable组件可以采用一组查询标准查询操作符扩展函数,使得每一这样的操作符可以取委托作为其自变量(例如,如在任何合适的命名空间中定义的)。该镜像组件可以复制IEnumerable和IEnumerable<T>来提供允许查询通过利用IQueryable和IQueryable<T>所创建的表达式树的通用接口,其中标准查询操作符扩展方法的IQueryable和IQueryable<T>版本取所创建的表达式树而非委托作为其自变量。
根据所要求保护的主题的一方面,该镜像组件可实现一查询处理器。该查询处理器可利用与IEnumerable相关联的数据操作,诸如但不限于,Where、Select、SelectMany、过滤器函数、分组函数、变换函数、与IEnumerable接口和/或IEnumerable<T>接口兼容的任何合适的函数等等。该镜像组件可以创建数据集合的表达式树表示(例如,查询可产生数据集合,而该数据集合由一表达式树来表示),其中该表示可以是用于任何合适的查询处理器的更通用且查询友好类型的数据。
此外,该镜像组件可以为查询处理器提供允许本地地、远程地、通过线路等查询数据,而不管编程语言和/或格式如何的可插入架构。例如,可以创建表示数据集合的表达式树(例如,查询可产生数据集合,而该数据集合由表达式树来表示),然后可在其上实现各种数据操作(例如,远程地、本地地等等)。此外,这一数据可以在远程位置中与如查询本地计算机的存储器中的数据一样查询。在所要求保护的主题的其它方面,提供了方便创建表达式树表示以允许实现数据操作的方法。
以下描述和附图详细阐明了所要求保护的主题的某些说明性方面。然而,这些方面仅指示了可采用本发明的原理的各种方法中的几种,且所要求保护的主题旨在包括所有这些方面及其等效方面。当结合附图考虑以下本发明的详细描述时,所要求保护的主题的其它优点和新颖特征将变得显而易见。
附图简述
图1示出了方便创建表达式树表示以允许实现数据操作的示例性系统的框图。
图2示出了方便利用数据集合的表达式树表示以用查询处理器来采用数据操作的示例性系统的框图。
图3示出了方便实现可插入查询处理器以查询数据集合的示例性系统的框图,其中查询可由表达式树来表示。
图4示出了方便对IEnumerable接口和IEnumerable<T>接口制作镜像以提供查询数据的通用接口的示例性系统的框图。
图5示出了根据本发明的各种函数的示例性关系的框图。
图6示出了方便利用数据集合的表达式树表示以用查询处理器来采用数据操作的示例性系统的框图。
图7示出了用于创建表达式树表示以允许实现数据操作的示例性方法。
图8示出了方便实现可插入查询处理器以查询可由表达式树表示的数据集合的示例性方法。
图9示出了利用数据集合的表达式树表示以用查询处理器来采用数据操作的示例性方法。
图10是示例编译器操作环境的示意性框图。
图11示出了其中可采用所要求保护的主题的新颖方面的示例性联网环境。
图12示出了根据所要求保护的主题的可采用的示例性操作环境。
详细描述
所要求保护的主题参考附图来描述,所有附图中使用相同的参考标号来指代相同的元素。在以下描述中,为解释起见,阐明了众多具体细节以提供对本发明的全面理解。然而,很明显,所要求保护的主题可以在没有这些具体细节的情况下实施。在其它情况下,以框图形式示出了公知的结构和设备以便于描述本发明。
如在此使用的,术语“组件”、“系统”、“接口”、“处理器”、“查询”、“操作”等指的是计算机相关的实体,它们可以是硬件、软件(例如,执行中的)和/或固件。例如,组件可以是运行在处理器上的进程、处理器、对象、可执行码、程序、和/或计算机。作为说明,运行在服务器上的应用程序和服务器都可以是组件。一个或多个组件可驻留在一个进程内,且组件可位于一台计算机上和/或分布在两台或更多计算机之间。
此外,所要求保护的主题可以使用产生控制计算机以实现所公开的主题的软件、固件、硬件或其任意组合的标准编程和/或工程技术而被实现为方法、装置或制品。在此使用的术语“制品”旨在涵盖可以从任何计算机可读设备、载体或介质访问的计算机程序。例如,计算机可读介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、智能卡和闪存设备(例如,卡、棒、键驱动器……)。另外应该明白,载波可以被用于承载计算机可读电子数据,例如那些用于发送和接收电子邮件或用于访问如因特网或局域网(LAN)等网络的数据。当然,本领域的技术人员将会认识到,在不背离所要求保护的主题的范围或精神的前提下可以对这一配置进行许多修改。此外,在此使用词语“示例性”意指用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其他方面或设计更优选或有利。
现在转向附图,图1示出了方便创建表达式树表示以允许实现数据操作的系统100。系统100包括镜像组件102,该组件可通过实现IEnumerable组件104来提供查询数据的通用接口,IEnumerable组件可接收要在这一数据上实现的数据操作。IEnumerable组件104可以提供特别地对数据集合工作并且具有特定且刚性特性的通用集合类型。例如,IEnumerable组件104可采用对利用与通用集合类型兼容的特定编程语言的数据集合的各种标准查询扩展符(extender),诸如但不限于,Where、Select、SelectMany、过滤器函数、分组函数、变换函数等。另外,IEnumerable组件104可以采用一组查询标准查询操作符扩展函数,使得每一这样的操作符可以取委托作为其自变量(例如,如在任何合适的命名空间中定义的)。
镜像组件102可以复制与IEnumerable组件104,特别地,IEnumerable接口和IEnumerable<T>接口相关联的函数。对IEnumerable组件104的这一复制允许镜像组件102提供标准接口IQueryable<T>和非通用对应IQueryable,各类型可实现这些接口来用信号表示支持经由表达式树对查询的深嵌入。镜像组件102可以采用数据集合和查询的表达式树表示。通过将查询和数据集合表示为表达式树,IQueryable和IQueryable<T>接口可以是能用于实现数据操作的通用接口,因为数据类型更有助于基于表达式树表示的查询处理器。因此,系统100方便查询关系型数据、可扩展标记语言(XML)对象、面向对象的语言、编程语言等等。
镜像组件102可以基于要查询的数据集合(未示出)和查询来创建表达式树表示。例如,数据集合可以基于判定函数来过滤,其中常规上,IEnumerable接口和IEnumerable<T>接口被限于特定类型、操作、特性和/或格式。然而,通过允许镜像组件102提供可对IEnumerable和IEnumerable<T>函数进行复制/制作镜像的通用接口,可从数据集合和查询中创建表达式树表示,以允许对其实现查询、数据操作等。一般而言,可以理解,该表达式树表示允许任何合适的查询处理器对其实现数据操作(Where、Select、SelectMany、过滤器函数、分组函数、变换函数等)。换言之,系统100为查询处理器提供允许本地地、远程地、通过线路等查询数据,而不管编程语言和/或格式如何的可插入架构。例如,系统100允许创建查询表达式的表示,然后将其发送到数据并允许其远程地实现。此外,这一数据可以在远程位置中与如查询本地计算机的存储器中的数据一样查询。
图2示出了方便利用数据集合和查询的表达式树表示以用查询处理器来采用数据操作的系统200。系统200可包括可接收要在数据集合202上实现的数据操作的IEnumerable组件104,其中这一数据操作可以是,例如Where、Select、SelectMany、过滤器函数、分组函数、变换函数、与IEnumerable接口和/或IEnumerable<T>接口兼容的任何合适的函数等等。镜像组件102可以创建数据集合和查询的表达式树表示,该表示可以是用于任何合适的查询处理器的更通用且查询友好类型的数据。一般而言,镜像组件102和所创建的表达式树表示允许通过任何特定的编程语言,而不限于IEnumerable和IEnumerable<T>特性、格式、数据结构等,来实现与IEnumerable组件104相关的数据操作符(例如,IEnumerable接口、IEnumerable<T>标准查询操作符等)。
镜像组件102用IQuerable和IQueryable<T>接口以及标准查询操作符扩展方法来复制IEnumerable和IEnumerable<T>接口和标准查询操作符扩展方法。例如,只要基于IEnumerable的操作具有委托自变量(例如,诸如元素变换、元素分组操作等操作),基于IQueryable的操作符就具有表达式树表示作为其自变量。该镜像制作允许系统200定义标准接口IQueryable<T>及其非通用对应IQueryable以用信号表示其支持经由表达式树的查询深嵌入。
此外,在创建了表达式树表示之后,可以实现查询处理器204来提供查询结果206。可以理解,镜像组件102创建表达式树表示,使得任何合适的查询处理器204可以基于通过IQueryable和IQueryable<T>复制的任何IEnumerable接口和/或IEnumerable<T>接口来查询数据集合202。换言之,系统200可以用任何合适的查询处理器插入来提供查询结果。
图3示出了方便实现可插入查询处理器以查询可由表达式树表示的数据集合和查询的系统300。系统300可包括可创建代码的表达式树表示以允许利用任何查询处理器来查询数据集合202而不管编程语言、类型、格式等如何的镜像组件102。例如,查询处理器可以经由IQueryable和IQueryable<T>来实现与IEnumerable和IEnumerable<T>相关的数据操作,而不遵循与IEnumerable和/或IEnumerable<T>相关联的特定数据类型、特性、格式等。
尽管IEnumerable组件104被描绘在镜像组件102内,但是可以理解,IEnumerable组件104可以是独立的组件、被合并到镜像组件102中、与IQueryable组件302集成、和/或其任意组合。IQueryable组件302可以接收数据操作,其中这一数据操作可以从IEnumerable组件104和相应函数制作镜像。由此,与IEnumerable和IEnumerable<T>相关联的数据操作可以基于表达式树表示的实现而非与IEnumerable和IEnumerable<T>相关联的数据格式以更通用的方式经由IQueryable和IQueryable<T>来实现。由此,镜像组件102可以通过对IEnumerable和IEnumerable<T>制作镜像来创建可被查询的表达式树表示。可以理解和明白,如果创建了特定数据集合的表达式树,则不需要对完全不同的数据操作和/或查询重新创建该表达式树。换言之,该表达式树表示可被重复使用。
可以理解,该表达式树表示可以由任何合适的查询处理器304来使用以允许查询数据。查询处理器304可以被“插入”以允许利用任何合适的查询操作和/或数据操作。此外,可以有任意数量的查询处理器304,诸如查询处理器1到查询处理器N,其中N是正整数。查询处理器304可以是插件以利用表达式树表示来允许查询各种数据集合。
图4示出了方便对IEnumerable接口和IEnumerable<T>接口制作镜像以提供查询数据的通用接口的系统400。系统400可包括可提供通用接口的镜像组件102,该通用接口允许各类型用信号表示它们支持利用表达式树表示的查询深嵌入。正如IEnumerable一样,镜像组件102还可实现任何标准序列操作符,但是可取表达式树作为输入来代替委托。该系统还可包括可实现IQueryable接口的IQueryable组件402。例如,可实现以下伪代码:
public interface IQueryable:IEnumerable{
Expression Expression{get;}
Type ElementType{get;}
IQueryable CreateQuery(Expression表达式);
object Execute(Expression表达式);
}
public interface IQueryable<T>:IEnumerabte<T>,IQueryable{
IQueryable<S>CreateQuery<S>(Expression表达式);
S Execute<S>(Expression表达式);
}
只读特性Expression返回查询当前所表示的表达式树,而ElementType特性返回由IQueryable表示的集合的元素类型。CreateQuery方法是给定表达式树创建可查询对象(queryable)的“虚”构造函数。类似地,Execute是用于查询的工厂方法,其返回本身不再是可查询的值。
镜像组件102还可包括可方便利用序列操作符的IOrderedQueryable组件404。例如,可由IOrderedQueryable组件404来实现以下伪代码:
public interface IOrderedQueryable:IQueryable{}
public interface IOrderedQueryable<T>:IQueryable<T>,IOrderedQueryable
{}
IOrderedQueryable和IOrderedQueryable<T>对由各种OrderBy序列操作符使用的OrderedSequence类型制作镜像。
现有的IEnumerable和IEnumerable<T>用全部都取委托作为其自变量(如在任何合适的命名空间中定义的)的标准查询操作符(Where、Select、SelectMany、……)来扩展。例如,扩展方法Where取源集合和委托,并产生对其判定为真的所有值:
public static IEnumerable<T>Where<T>(该IEnumerable<T>的源,Func<T,
bool>判定){
foreach(源中的T元素){
if(判定(元素))产生返回元素;
}
}
对于IQueryable和IQueryable<T>,镜像组件102可以引入使用表达式树而非委托来实现标准查询操作符的扩展。例如,此处是Where的一个可能实现,注意,它对判定自变量取表达式树而非委托,但是对于其余自变量,特征与如在IEnumerable上定义的Where扩展方法的特征同构:
public static IQueryable<T>Where<T>(该IQueryable<T>的源,
Expression<Func<T,bool>>判定){
return源.CreateQuery<T>(
Expression.Call(
((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(T)),
null,
new Expression[]{源.Expression,判定}
));
}
其它标准序列操作符的实现非常相似,并且实际上每一实现都创建一对应于“在源上调用自身”的表达式树。结果,标准查询操作符的实现完全是通用的,并且可由希望使用表达式树(例如,深嵌入)的任何应用程序可编程接口(API)来使用。
除了镜像组件102提供标准查询操作符的实现之外,镜像组件102可提供可将IEnumerable转变为Queryable的ToQueryable()操作符。例如,可利用以下伪代码:
public static IQueryable<T>ToQueryable<T>(该IEnumerable<T>的源){}
public static IQueryable ToQueryable(该IEnumerable的源){}如果源的动态类型已经是IQueryable,则该操作实际上是向下强制转换。否则,创建包含该源作为常量表达式的新IQueryable实例。
镜像组件102还可包括方便将表达式树编译为委托的助手组件406。换言之,该助手组件406可提供经由从给定表达式树动态地生成集成语言(LI)的助手方法T Compile<T>(该Expression<T>的f)来将表达式树编译为委托的方法,如下:
Expression<Func<Customer,bool>>e=c=>c.City=="London";
Func<Customer,bool>f=e.Compile();
此外,镜像组件102可包括可提供将串语法分析为表达式树的助手方法并提供用于绑定串内的自由变量的解析器的语法分析串助手组件408。语法分析串助手组件408可引入用于对委托的串表示进行语法分析的一组助手方法。在一般的情况下,语法分析器取该表达式所表示的委托的参数的列表以及一名称解析器,该名称解析器在给定表达式中的自由变量的名称时返回该名称所绑定到的成员信息(member info):
public static Expression<T>Parse<T>(string表达式)
public static Expression<T>Parse<T>(Parameters参数,string表达式,
NameResolver解析器)
图5示出了根据本发明的各种函数的示例性关系500。示例性关系500示出了IQuerable<T>508对IEnumerable502制作镜像,而IQueryable504对IEnumerable<T>506制作镜像的事实。换言之,IQueryable:IEnumerable andIQueryable<T>:IQueryable,IEnumerable<T>。
图6示出了采用智能以方便利用数据集合的表达式树表示以用查询处理器来采用数据操作的系统600。系统600可包括镜像组件602、IEnumerable组件604以及IQueryable组件606,这些组件基本上类似于在先前各图中所描述的相应组件。系统600还包括智能组件608。智能组件608可由镜像组件602用于方便创建表达式树表示以允许实现数据操作。例如,智能组件608可以推导表达式树表示、数据操作、查询、查询操作符、数据集合、与IEnumerable和IQueryable相关的镜像制作能力等等。
可以理解,智能组件608能够从一组通过事件和/或数据捕捉到的观察结果中推出或推断系统、环境和/或用户的状态。例如,推断可用于标识特定的上下文或动作,或可生成状态的概率分布。推断可以是概率性的——即,基于数据和事件的考虑计算感兴趣的状态的概率分布。推断也可以指用于从一组事件和/或数据合成更高级事件的技术。这类推断导致从一组观察到的事件和/或储存的事件数据中构造新的事件或动作,而无论事件是否在相邻时间上相关,也无论事件和数据是来自一个还是若干个事件和数据源。可采用各种分类(显式和/或隐式训练的)方案和/或系统(例如,支持矢量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎……)来执行关于所要求保护的主题的自动化和/或推断的动作。
分类器是将输入属性矢量x=(x1,x2,x3,x4,xn)映射到该输入属于一个类的置信度的函数,即f(x)=confidence(class)。这一分类可采用基于概率和/或基于统计的分析(例如,分解成分析效用和成本)来预测或推断用户期望自动执行的动作。支持矢量机(SVM)是可采用的分类器的一个示例。SVM通过找出可能输入空间中的超曲面来操作,其中,超曲面试图将触发准则从非触发事件中分离出来。直观上,这使得分类对于接近但不等同于训练数据的测试数据正确。可采用其它定向和非定向模型分类方法,包括,例如,朴素贝叶斯、贝叶斯网络、决策树、神经网络、模糊逻辑模型以及提供不同独立性模式的概率分类模型。此处所使用的分类也包括用于开发优先级模型的统计回归。
镜像组件602还可利用提供各种类型的用户界面来方便用户和耦合到镜像组件602的任何组件之间的交互的呈现组件610。如所描绘的,呈现组件610是可以与镜像组件602一起利用的单独实体。然而,可以理解,呈现组件610和/或类似的查看组件可以被结合到镜像组件602中和/或是一独立单元。呈现组件610可提供一个或多个图形用户界面(GUI)、命令行界面等等。例如,可以呈现向用户提供对数据进行加载、导入、读取等的区域或手段的GUI,并且所述GUI可包括呈现这些动作的结果的区域。这些区域可包括已知的文本和/或图形区域,包括对话框、静态控件、下拉菜单、列表框、弹出菜单、编辑控件、组合框、单选按钮、复选框、按钮以及图形框。另外,可采用便于呈现的工具,诸如用于导航的垂直和/或水平滚动条以及确定一区域是否可被查看的工具栏按钮。例如,用户可以与耦合到和/或结合到镜像组件602中的一个或多个组件交互。
用户还可与这些区域交互,以便例如经由诸如鼠标、滚球、键区、键盘、笔和/或语音激活等各种设备来选择和提供信息。通常,诸如键盘上的按钮或回车键等机制可在输入了信息之后采用以启动搜索。然而,可以理解,所要求保护的主题不限于此。例如,仅仅加亮显示一复选框可启动信息传送。在另一示例中,可采用命令行界面。例如,命令行界面可以提示(例如,经由显示器上的文本消息和音频声调)用户通过提供文本消息来输入信息。用户然后可提供适当的信息,诸如对应于在该界面提示中提供的选项的字母数字输入或对提示中所提出的问题的回答。可以理解,命令行界面可以与GUI和/或API结合使用。另外,命令行界面可以结合具有有限图形支持和/或低带宽通信信道的硬件(例如,视频卡)和/或显示器(例如,黑白和EGA)来使用。
图7-9示出了根据所要求保护的主题的方法。为解释简明起见,该方法被描绘和描述为一系列动作。可以理解和明白,本发明不受所示的动作和/或动作次序的限制,例如,动作可按各种次序和/或同时发生,并且可以与此处未呈现和描述的其它动作一起发生。此外,并非所有示出的动作都是实现根据所要求保护的主题的方法所必需的。另外,本领域的技术人员可以理解和明白,方法可经由状态图或事件替代地被表示为一系列相关状态。另外还应该明白,下文以及本说明书全文中所公开的方法可以被存储在制品上,以便于把此类方法传送和转移到计算机。在此使用的术语“制品”意指包含可以从任何计算机可读设备、载体或介质访问的计算机程序。
图7示出了方便创建表达式树表示以允许实现数据操作的方法700。在参考标号702处,可接收数据操作。在一个示例中,可以在数据集合上实现数据操作,其中这一数据操作可以是,例如Where、Select、SelectMany、过滤器函数、分组函数、变换函数、与IEnumerable接口和/或IEnumerable<T>接口兼容的任何合适的函数等等。在另一实例中,该数据操作可以从用户、实体、机器、本地机器、远程机器等接收。
在参考标号704处,可对IEnumerable和IEnumerable<T>制作镜像以提供查询数据的通用接口。基于与具有特定和刚性特性的IEnumerable相关联的数据,一通用接口可以复制与IEnumerable,尤其是IEnumerable接口和IEnumerable<T>接口及其标准查询操作符扩展方法相关联的函数。对IEnumerable的这一复制允许标准接口IQueryable<T>和非通用相应IQueryable向任何合适的类型用信号表示支持经由表达式树的查询深嵌入。通过将数据集合表示为表达式树,IQueryable和IQueryable<T>接口可以是能用于实现数据操作的通用接口,因为数据类型更有助于基于表达式树表示的查询处理器,其因此允许对IEnumerable和IEnumerable<T>制作镜像。
图8示出了方便实现可插入查询处理器以查询可由表达式树表示的数据集合的方法800。在参考标号802处,可接收要在数据集合上实现的数据操作。在参考标号804处,可创建该数据集合的表达式树表示。该表达式树表示可以与数据集合相关联。通过将数据集合或查询表示为表达式树,IQueryable接口和IQueryable<T>接口可以是实现至少一个数据操作的通用接口,因为数据类型更有助于基于表达式树表示的查询处理器。
在参考标号806处,该数据操作可利用例如查询处理器在表达式树上实现。该数据操作然后可利用采用对IEnumerable和IEnumerable<T>函数制作镜像的IQueryable和IQueryable<T>接口的技术来通用地应用。通过对IEnumerable和IEnumerable<T>的函数制作镜像,可以在表达式树而非通常与IEnumerable和IEnumerable<T>相关联的严格且刚性的数据集合上采用数据操作。因此,方法800方便查询关系型数据、可扩展标记语言(XML)对象、面向对象的语言、编程语言等等。一般而言,可以理解,该表达式树表示允许任何合适的查询处理器对其实现数据操作(Where、Select、SelectMany、过滤器函数、分组函数、变换函数等)。
图9示出了利用数据集合的表达式树表示以用查询处理器来采用数据操作的方法900。在参考标号902处,可接收要在数据集合上实现的数据操作。该数据操作可以是,但不限于,Where、Select、SelectMany、过滤器函数、分组函数、变换函数、与IEnumerable接口和/或IEnumerable<T>接口兼容的任何合适的函数等等。在参考标号904处,可通过利用对接口IEnumerable和IEnumerable<T>制作镜像的两个接口IQueryable和IQueryable<T>来创建表示该数据集合的表达式树。
在参考标号906处,可在该表达式树上实现数据操作。通过对IEnumerable和IEnumerable<T>的函数制作镜像,可以在表达式树而非通常与IEnumerable和IEnumerable<T>相关联的严格且刚性的数据集合上(例如,利用IQueryable和IQueryable<T>)采用数据操作。通过将数据集合表示为表达式树,IQueryable和IQueryable<T>接口可以是能用于实现数据操作的通用接口,因为数据类型更有助于基于表达式树表示的查询处理器。
在参考标号908处,可以插入任何合适的查询处理并且查询表示该数据集合的表达式树。一般而言,可以理解,该表达式树表示允许任何合适的查询处理器对其实现数据操作(Where、Select、SelectMany、过滤器函数、分组函数、变换函数等)。换言之,方法900为查询处理器提供允许本地地、远程地、通过线路等查询数据,而不管编程语言和/或格式如何的可插入架构。例如,方法900允许创建查询表达式的表示,然后将其发送到数据并允许其远程地实现。此外,这一数据可以在远程位置中与如查询本地计算机的存储器中的数据一样查询。
图10是描绘根据本发明的可用于产生实现代码(例如,可执行码、中间语言……)的编译器环境1000的框图。编译器环境1000包括编译器1010,而编译器1014包括前端组件1020、转换器组件1030、后端组件1040、差错校验器组件1050、符号表1060、语法分析树1070和状态1080。编译器1010接受源代码作为输入并且产生实现代码作为输出。输入可以包括但不限于在此描述的定界的程序性表达式或限定标识符。编译器环境的各组件和模块间的关系示出了主要的数据流。为了简明起见没有示出其他的组件和关系。取决于实现,组件可以被添加、省略、拆分成多个模块、与其他模块和/或其他模块的配置相组合。
编译器1020可以接受具有与处理元素序列相关联的源代码的文件作为输入。源代码可以包括各种表达式和关联函数、方法和/或其他程序性构造。编译器1020可以结合一个或多个组件来对源代码进行处理以分析构造并生成或注入代码。
前端组件1020读取源代码并对其执行词法分析。实质上,前端组件1020读取源代码写成的字符(例如,字母数字)序列并将其翻译成指示常量、标识符、操作符号、关键字、和标点等的句法元素或标记。
转换器组件1030将标记语法分析成中间表示。例如,转换器组件1030能够检查句法并将标记分组为表达式或其他的句法结构,后者进而接合成语句树。概念上,这些树形成语法分析树1070。此外并且在适当情况下,转换器模块1030可以将条目放入符号表1030中,符号表1030将在源代码中使用的符号名和类型信息连同相关特性一起列出。
状态1080可用于跟踪编译器910在处理接收到或检索到的源代码并形成语法分析树1070时的进度。例如,不同的状态值指示编译器1010是在类定义或函数的开始、是刚声明了类成员、还是已经完成了表达式。随着编译器的进展,它不断地更新状态1080。编译器1010可部分地或者完全地将状态1080曝露给外界实体,外界实体随之可向编译器1010提供输入。
基于源代码内的构造或其他信号(或者如果以其他方式识别出此机会),转换器组件1030或另一组件可注入对应于促进高效率及正确执行的代码。编码在转换器组件1030或其他组件中的规则指示为能实现期望的功能并识别要注入代码的位置或要实行其他操作的位置所必须完成的动作。注入的代码通常包括在一个或多个位置处添加的语句、元数据、或其他元素,但是该术语也可以包括改变、删除、或以其他方式修改现有的源代码。注入的代码可以作为一个或多个模板或以某种其他形式来存储。此外,应该认识到可能发生符号表的操纵以及语法分析树的转化。
基于符号表1060和语法分析树1070,后端组件1040可将中间表示翻译成输出代码。后端组件1040将中间表示转换成可在目标处理器中执行的或由其执行的指令,转换成对变量的存储器分配,等等。输出代码可以由真实的处理器执行,但是也能提供可由虚拟处理器执行的输出代码。
此外,前端组件1020和后端组件1040能够执行另外的功能,诸如代码优化,并且能够将所描述的操作作为单个阶段或分多个阶段执行。编译器1010的诸组件的各个其他方面在本质上是常规的,并且可由执行等效功能的组件代替。另外,在源代码处理过程中的各个阶段,差错校验器组件1050可以检验差错,诸如词法结构中的差错、句法差错、甚至是语义差错。一旦检测到差错,校验器组件1050就暂停编译并生成指示此差错的消息。
为了提供用于实现所要求保护的主题的各方面的附加上下文,图11-12及以下讨论旨在提供对其中可实现本发明的各方面的合适的计算环境的简要概括描述。例如,如在先前各图中所描述的提供用于利用表达式树表示来提供数据集合上的数据操作的通用接口的镜像组件可以在这一合适的计算环境中实现。尽管前面已经在运行在本地计算机和/或远程计算机上的计算机程序的计算机可执行指令的一般上下文中描述了所要求保护的主题,然而本领域内的技术人员将认识到,本发明也可以和与其他程序模块结合实现。一般地,程序模块包括执行特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等等。
此外,本领域的技术人员可以理解,本发明的方法可用其它计算机系统配置来实施,包括单处理器或多处理器计算机系统、小型机、大型计算机、以及个人计算机、手持式计算设备、基于微处理器的和/或可编程消费电子产品等,其每一个都可操作上与一个或多个相关联的设备通信。所示的要求保护的主题的各方面也可在其中某些任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实施。然而,本发明的一些方面(如果不是全部方面)可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和/或远程存储器存储设备中。
图11是要求保护的主题可以与之交互的示例性计算环境1100的示意性框图。系统1100包括一个或多个客户机1110。(诸)客户机1110可以是硬件和/或软件(例如,线程、进程、计算设备)。系统1100也包括一个或多个服务器1120。(诸)服务器1120可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1120可以容纳各线程以通过例如利用本发明执行转换。
在客户机1110和服务器1120之间的一种可能的通信能够以适合在两个或多个计算机进程之间传输的数据分组的形式进行。系统1100包括可以用来使(诸)客户机1110和(诸)服务器1120之间通信更容易的通信框架1140。(诸)客户机1110可在操作上连接到一个或多个可以用来存储对(诸)客户机1110本地的信息的客户机数据存储1150。同样地,(诸)服务器1120可在操作上连接到一个或多个可以用来存储对(诸)服务器1120本地的信息的服务器数据存储1130。
参考图12,用来实现所要求保护的主题各个方面的示例性环境1200包括计算机1212。计算机1212包括处理器单元1214、系统存储器1216和系统总线1218。系统总线1218将包括但不限于系统存储器1216的系统组件耦合到处理单元1214。处理单元1214可以是各种可用处理器中的任一种。双微处理器和其它多处理器体系结构也可用作处理单元1214。
系统总线1218可以是几种类型的总线结构中的任意一种,包括存储器总线或存储器控制器、外围总线或外部总线、和/或利用下述可用总线体系结构中的任意一种的局部总线,其包括但不限于,工业标准体系结构(ISA)、微通道体系结构(MSA)、扩展型ISA(EISA)、智能化驱动器电子接口(IDE)、VESA局部总线(VLB)、外围部件互连(PCI)、卡总线、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储卡国际联合会总线(PCMCIA)、火线(IEEE1294)、以及小型计算机系统接口(SCSI)。
系统存储器1216包括易失性存储器1220和非易失性存储器1222。基本输入/输出系统(BIOS)包含诸如在启动期间在计算机1212的元件之间传送信息的基本例程,其存储在非易失性存储器1222中。作为说明而非局限,非易失性存储器1222可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、或者闪存。易失性存储器1220包括用作外部高速缓冲存储器的随机存取存储器(RAM)。作为示例而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)。
计算机1212还包括可移动/不可移动、易失性/非易失性计算机存储介质。例如,图12示出了盘存储1224。盘存储1224包括但不限于诸如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡、或者记忆棒之类的设备。此外,盘存储1224可以包括独立的或者与其它存储介质结合的存储介质,包括但不限于诸如紧致盘ROM设备(CD-ROM)、可记录CD驱动器(CD-R驱动器)、可重写CD驱动器(CD-RW驱动器)或者数字多功能盘ROM驱动器(DVD-ROM)这样的光盘驱动器。为了便于将盘存储设备1224连接到系统总线1218,通常使用诸如接口1226等可移动或不可移动接口。
应该明白,图12描述了担当用户与在合适的操作环境1200中描述的基本计算机资源之间的中介的软件。这样的软件包括操作系统1228。存储在盘存储1224上的操作系统1228用于控制并分配计算机系统1212的资源。系统应用程序1230通过存储在系统存储器1216或盘存储1224上的程序模块1232和程序数据1234利用了操作系统1228对资源的管理。应该明白,所要求保护的主题可以用各种操作系统或操作系统的组合来实现。
用户通过输入设备1236把命令或信息输入到计算机1212中。输入设备1236包括但不限于诸如鼠标、跟踪球、指示笔、触摸垫等定点设备、键盘、话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、TV调谐卡、数码相机、数码摄像机、网络摄像头等等。这些以及其它输入设备通过系统总线1218经由接口端口1238连至处理单元1214。接口端口1238包括,例如串行端口、并行端口、游戏端口、以及通用串行总线(USB)。输出设备1240利用和输入设备1236相同类型的某些端口。因此,例如,USB端口可以用来向计算机1212提供输入,以及把来自计算机1212的信息输出到输出设备1240。提供输出适配器1242是为了说明除了输出设备1240之外还有一些像监视器、扬声器、以及打印机这样的需要专用适配器的输出设备1240。输出适配器1242包括,作为说明而非局限,提供输出设备1240和系统总线1218之间的连接手段的显卡和声卡。应该注意到,其它设备和/或设备系统提供了输入和输出能力,诸如远程计算机1244。
计算机1212可以使用至诸如远程计算机1244等一个或多个远程计算机的逻辑连接在网络化环境中操作。远程计算机1244可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的电器、对等设备或者其它常见的网络节点等,且通常包括相对于计算机1212所描述的很多或者全部元件。为了简明起见,对远程计算机1244仅示出了存储器存储设备1246。远程计算机1244经由网络接口1248被逻辑地连接到计算机1212,然后经由通信连接1250物理地连接。网络接口1248包括诸如局域网(LAN)和广域网(WAN)这样的有线和/或无线通信网络。LAN技术包括光纤分布式数据接口(FDDI)、铜分布式数据接口(CDDI)、以太网、令牌环等。WAN技术包括但不限于,点对点链路、诸如综合业务数字网(ISDN)及其各种变体等电路交换网、分组交换网、以及数字用户线(DSL)。
通信连接1250指的是用于把网络接口1248连接到总线1218的硬件/软件。虽然为了清楚地举例说明,通信连接1250被示为在计算机1212的内部,但其也可以在计算机1212的外部。连接到网络接口1248所需要的硬件/软件包括,仅出于示例的目的,内部和外部技术,诸如包括常规电话级调制解调器、电缆调制解调器以及DSL调制解调器的调制解调器、ISDN适配器和以太网卡。
在上面所描述的包括本发明的示例。当然,不可能为了描述所要求保护的主题而描述组件或方法的每一个可以想到的组合,但本领域内的普通技术人员应该认识到,本发明的许多进一步的组合和排列都是可能的。因此,所要求保护的主题旨在涵盖所有这些落入所附权利要求书的精神和范围内的改变、修改和变动。
特别地,对于由上述组件、设备、电路、系统等执行的各种功能,除非另外指明,否则用于描述这些组件的术语(包括对“装置”的引用)旨在对应于执行所描述的执行此处在所要求保护的主题的示例性方面中所示的功能的组件的指定功能(例如,功能上等效)的任何组件,即使这些组件在结构上不等效于所公开的结构。在这一点上,也可认识到本发明包括用于执行所要求保护的主题的各种方法的动作和/或事件的系统以及具有用于执行这些动作和/或事件的计算机可执行指令的计算机可读介质。
另外,尽管可相对于若干实现中的仅一个来公开本发明的一个特定特征,但是这一特征可以如对任何给定或特定应用所需且有利地与其它实现的一个或多个其它特征相组合。此外,就在说明书或权利要求书中使用术语“包括”和“含有”及其变体而言,这些术语旨在以与术语“包含”相似的方式为包含性的。
Claims (21)
1.一种帮助利用嵌入式语言的显式表示来查询数据的系统,包括:
IEnumerable组件(104、604),所述IEnumerable组件接收要利用IEnumerable接口和IEnumerable<T>接口中的至少一个以及至少一个相应的相关联标准查询操作符扩展技术在数据集合(202)上采用的数据操作;以及
镜像组件(102、602),所述镜像组件通过利用对所述IEnumerable接口和IEnumerable<T>接口中的至少一个以及至少一个相应的相关联标准查询操作符制作镜像的至少一个函数将所述数据集合(202)和查询表示为表达式树,来提供查询所述数据集合的通用接口。
2.如权利要求1所述的系统,其特征在于,将所述数据集合表示为所述表达式树是由IQueryable和IQueryable<T>中的至少一个实现的。
3.如权利要求1所述的系统,其特征在于,所述IEnumerable组件提供特别地对所述数据集合工作的通用集合类型。
4.如权利要求3所述的系统,其特征在于,所述IEnumerable组件利用与所述通用集合类型兼容的特定编程语言,来对所述数据集合采用标准查询操作符扩展方法。
5.如权利要求4所述的系统,其特征在于,所述标准查询操作符扩展方法是Where、Select、SelectMany、过滤器函数、分组函数和变换函数中的至少一个。
6.如权利要求4所述的系统,其特征在于,所述特定编程语言是面向对象的语言。
7.如权利要求1所述的系统,其特征在于,所述IEnumerable组件利用至少一个委托作为自变量。
8.如权利要求7所述的系统,其特征在于,所述自变量在命名空间中定义。
9.如权利要求1所述的系统,其特征在于,所述镜像组件利用标准接口IQueryable<T>和非通用相应IQueryable接口来用信号表示对经由表达式树的查询深嵌入的支持。
10.如权利要求9所述的系统,其特征在于,所述IQueryable<T>接口和IQueryable接口中的至少一个可以利用所述表达式树来实现所述数据操作以查询关系型数据、可扩展标记语言(XML)对象、和程序语言中的至少一个。
11.如权利要求10所述的系统,其特征在于,所述程序语言是面向对象的语言。
12.如权利要求1所述的系统,其特征在于,所述镜像组件利用IQueryable和IQueryable<T>中的至少一个来复制与所述IEnumerable接口和所述IEnumerable<T>接口中的至少一个相关联的标准查询操作符扩展方法,所述函数是Where、Select、SelectMany、过滤器函数、分组函数和变换函数中的至少一个。
13.如权利要求1所述的系统,其特征在于,所述镜像组件利用所述表达式树作为对被制作镜像的IQueryable和IQueryable<T>标准查询操作符扩展方法中的至少一个的输入,正如利用委托作为对IEnumerable和IEnumerable<T>标准查询操作符扩展方法中的至少一个的输入一样。
14.如权利要求1所述的系统,其特征在于,还包括查询处理器,所述查询处理器利用所述表达式树来独立于同所述查询处理器相关联的编程语言和与所述查询处理器相关的格式中的至少一个查询所述数据集合。
15.如权利要求14所述的系统,其特征在于,所述数据集合是以本地地、远程地和通过线路中的至少一种方式来查询的。
16.如权利要求14所述的系统,其特征在于,所述数据集合是以与查询本地计算机的存储器中的数据相同的方式来远程地查询的。
17.一种帮助为查询处理器提供可插入架构的计算机实现的方法,包括:
接收要在数据集合上实现的数据操作(702、802、902);
创建所述集合数据的表达式树(804、904);
利用IEnumerable和IEnumerable<T>中的至少一个的被制作镜像的函数在所述表达式树上实现所述数据操作(704、806、906);以及
利用一通用接口来基于数据操作和被制作镜像的函数查询所述数据(704、806、906)。
18.如权利要求17所述的方法,其特征在于,还包括允许查询处理器独立于同所述查询处理器相关联的编程语言和与所述查询处理器相关的格式中的至少一个来查询所述表达式树。
19.如权利要求17所述的方法,其特征在于,还包括IQueryable接口标准查询操作符扩展方法和IQueryable<T>接口标准查询操作符扩展方法中的至少一个对IEnumerable和IEnumerable<T>标准查询操作符扩展方法中的至少一个制作镜像。
20.如权利要求19所述的方法,其特征在于,以下的至少一个利用所述表达式树,利用所述IQueryable接口标准查询操作符扩展方法和IQueryable<T>接口标准查询操作符扩展方法来制作镜像:Where;Select;SelectMany;过滤器函数;分组函数;以及变换函数。
21.一种方便利用嵌入式语言的显式表示来查询数据的计算机实现的系统,包括:
用于接收要在数据集合上采用的数据操作的装置(104、604、702、802、902);
用于将所述数据集合表示为表达式树的装置(102、602、804、904);以及
用于采用通用接口来查询所述数据集合的装置(102、602、704、806、906),所述通用接口利用至少一个函数,所述至少一个函数接收所述表达式树而非委托作为输入,并对IEnumerable接口和标准查询操作符扩展方法、以及IEnumerable<T>接口和标准查询操作符扩展方法中的至少一个组合制作镜像。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US74643906P | 2006-05-04 | 2006-05-04 | |
US60/746,439 | 2006-05-04 | ||
US11/464,874 US7860823B2 (en) | 2006-05-04 | 2006-08-16 | Generic interface for deep embedding of expression trees in programming languages |
US11/464,874 | 2006-08-16 | ||
PCT/US2007/006576 WO2007130227A1 (en) | 2006-05-04 | 2007-03-15 | A generic interface for deep embedding of expression trees in programming languages |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101438244A CN101438244A (zh) | 2009-05-20 |
CN101438244B true CN101438244B (zh) | 2013-06-12 |
Family
ID=38668071
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800158742A Expired - Fee Related CN101438244B (zh) | 2006-05-04 | 2007-03-15 | 用于在编程语言中深嵌入表达式树的通用接口 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7860823B2 (zh) |
EP (1) | EP2021918A4 (zh) |
JP (1) | JP5123291B2 (zh) |
KR (1) | KR20090009834A (zh) |
CN (1) | CN101438244B (zh) |
WO (1) | WO2007130227A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8296730B2 (en) * | 2008-03-12 | 2012-10-23 | Microsoft Corporation | Using extension methods to extend COM objects |
US8713015B2 (en) * | 2008-04-23 | 2014-04-29 | Microsoft Corporation | Expressive grouping for language integrated queries |
US8364750B2 (en) | 2008-06-24 | 2013-01-29 | Microsoft Corporation | Automated translation of service invocations for batch processing |
US8713048B2 (en) * | 2008-06-24 | 2014-04-29 | Microsoft Corporation | Query processing with specialized query operators |
US8375044B2 (en) * | 2008-06-24 | 2013-02-12 | Microsoft Corporation | Query processing pipelines with single-item and multiple-item query operators |
US8819046B2 (en) * | 2008-06-24 | 2014-08-26 | Microsoft Corporation | Data query translating into mixed language data queries |
US8364751B2 (en) | 2008-06-25 | 2013-01-29 | Microsoft Corporation | Automated client/server operation partitioning |
US8291401B2 (en) * | 2008-08-07 | 2012-10-16 | International Business Machines Corporation | Processing symbols associated with shared assemblies |
US9760369B2 (en) * | 2013-12-13 | 2017-09-12 | Infosys Limited | Assessing modularity of a program written in object oriented language |
US9766789B1 (en) | 2014-07-07 | 2017-09-19 | Cloneless Media, LLC | Media effects system |
CN105243018B (zh) * | 2015-10-24 | 2017-11-24 | 北京航空航天大学 | 一种面向对象的类测试数据生成方法 |
RU2626337C1 (ru) * | 2016-02-18 | 2017-07-26 | Акционерное общество "Лаборатория Касперского" | Способ обнаружения мошеннической активности на устройстве пользователя |
CN111368146A (zh) * | 2018-12-26 | 2020-07-03 | 北京国双科技有限公司 | 一种路径信息的查询方法及装置、存储介质和处理器 |
US11036482B1 (en) * | 2020-12-22 | 2021-06-15 | Temper Systems, Inc. | Deriving many idiomatic programming language interfaces |
CN113010181B (zh) * | 2021-03-24 | 2022-05-27 | 北京百度网讯科技有限公司 | 一种深度学习框架之中算子的部署方法、装置及电子设备 |
CN116185495B (zh) * | 2022-12-13 | 2023-10-13 | 易保网络技术(上海)有限公司 | 计算函数构建方法、计算引擎、电子设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6370541B1 (en) * | 1999-09-21 | 2002-04-09 | International Business Machines Corporation | Design and implementation of a client/server framework for federated multi-search and update across heterogeneous datastores |
CN1492361A (zh) * | 2002-10-25 | 2004-04-28 | 联想(北京)有限公司 | 嵌入式数据库查询的处理方法 |
CN1635494A (zh) * | 2003-12-27 | 2005-07-06 | 海信集团有限公司 | 实现类内存数据库存取和检索的方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5129086A (en) * | 1988-11-29 | 1992-07-07 | International Business Machines Corporation | System and method for intercommunicating between applications and a database manager |
US5761493A (en) * | 1990-04-30 | 1998-06-02 | Texas Instruments Incorporated | Apparatus and method for adding an associative query capability to a programming language |
US20030182364A1 (en) * | 2002-03-14 | 2003-09-25 | Openwave Systems Inc. | Method and apparatus for requesting and performing batched operations for web services |
US7436947B2 (en) * | 2002-05-14 | 2008-10-14 | Avaya Inc. | Method and apparatus for automatic notification and response based on communication flow expressions |
US20040193575A1 (en) | 2003-03-25 | 2004-09-30 | Chia-Hsun Chen | Path expressions and SQL select statement in object oriented language |
US7937694B2 (en) * | 2004-02-13 | 2011-05-03 | Microsoft Corporation | Fast flattening of nested streams |
US20060080288A1 (en) * | 2004-10-11 | 2006-04-13 | Microsoft Corporation | Interaction of static and dynamic data sets |
US7962497B2 (en) * | 2005-02-18 | 2011-06-14 | Microsoft Corporation | Relationship modeling |
US7409636B2 (en) * | 2005-07-29 | 2008-08-05 | Microsoft Corporation | Lightweight application program interface (API) for extensible markup language (XML) |
US20070027849A1 (en) * | 2005-07-29 | 2007-02-01 | Microsoft Corporation | Integrating query-related operators in a programming language |
-
2006
- 2006-08-16 US US11/464,874 patent/US7860823B2/en active Active
-
2007
- 2007-03-15 JP JP2009509563A patent/JP5123291B2/ja not_active Expired - Fee Related
- 2007-03-15 CN CN2007800158742A patent/CN101438244B/zh not_active Expired - Fee Related
- 2007-03-15 WO PCT/US2007/006576 patent/WO2007130227A1/en active Application Filing
- 2007-03-15 KR KR1020087026416A patent/KR20090009834A/ko not_active IP Right Cessation
- 2007-03-15 EP EP07753221A patent/EP2021918A4/en not_active Ceased
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6370541B1 (en) * | 1999-09-21 | 2002-04-09 | International Business Machines Corporation | Design and implementation of a client/server framework for federated multi-search and update across heterogeneous datastores |
CN1492361A (zh) * | 2002-10-25 | 2004-04-28 | 联想(北京)有限公司 | 嵌入式数据库查询的处理方法 |
CN1635494A (zh) * | 2003-12-27 | 2005-07-06 | 海信集团有限公司 | 实现类内存数据库存取和检索的方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20090009834A (ko) | 2009-01-23 |
JP2009535730A (ja) | 2009-10-01 |
EP2021918A4 (en) | 2011-10-12 |
EP2021918A1 (en) | 2009-02-11 |
US20070271233A1 (en) | 2007-11-22 |
US7860823B2 (en) | 2010-12-28 |
WO2007130227A1 (en) | 2007-11-15 |
JP5123291B2 (ja) | 2013-01-23 |
CN101438244A (zh) | 2009-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101438244B (zh) | 用于在编程语言中深嵌入表达式树的通用接口 | |
US7478365B2 (en) | Method and system for rule-based generation of automation test scripts from abstract test case representation | |
US7581212B2 (en) | Method and system for conversion of automation test scripts into abstract test case representation with persistence | |
Canfora et al. | A wrapping approach for migrating legacy system interactive functionalities to service oriented architectures | |
CA2533073C (en) | Relationship modeling | |
CN110825362A (zh) | 低代码应用软件开发系统及方法 | |
US20090144703A1 (en) | Method and system for versioning a software system | |
CN101901148A (zh) | 基于autosar标准的ecu参数配置界面生成方法 | |
CN108228158A (zh) | 一种基于本体的架构行为模式识别方法 | |
Oluwagbemi et al. | Automatic generation of test cases from activity diagrams for UML based testing (UBT) | |
Franchitti et al. | Amalgame: a tool for creating interoperating persistent, heterogeneous components | |
Soden et al. | Towards a model execution framework for Eclipse | |
Sodhi et al. | An insight on software features supporting software transplantation: a systematic review | |
CN111277650B (zh) | 一种结合功能指标和非功能指标的自动化微服务识别方法 | |
CN115437616A (zh) | 一种基于JPA的Web代码自动生成系统 | |
CN113010434A (zh) | 一种实现轻量级应用埋点的系统和方法 | |
Popoola et al. | A LabVIEW metamodel for automated analysis | |
Yen et al. | An on-line repository for embedded software | |
Shafin et al. | Automated testing of Web Services system based on OWL-S | |
Mirshams Shahshahani | Extending the knowledge discovery metamodel to support aspect-oriented programming | |
Kiwelekar et al. | Ontological interpretation of object-oriented programming abstractions | |
Pastor et al. | From CASE to CARE (Computer-Aided Requirements Engineering) | |
Alrubaee | A component based model driven software development framework for web based applications | |
Prati et al. | A framework to integrate data mining components | |
Veisi | AHL: A Toolkit for Model-Driven Engineering of Android Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150505 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150505 Address after: Washington State Patentee after: MICROSOFT TECHNOLOGY LICENSING, LLC Address before: Washington State Patentee before: Microsoft Corp. |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130612 |
|
CF01 | Termination of patent right due to non-payment of annual fee |