LINQ有很多值得学习的地方,这里我们主要介绍LINQ Framework,包括介绍LINQ To Object Framework等方面。
Microsoft于新一代的.NET Framework 3.5中增加了几个新功能,其中之一就是LINQ,与其它新功能不同,架构上,LINQ是一个Framework方式呈现,理论上可以使用于任何的.NET Language中,但她的真正威力必须要程式语言配合才能够完全的发挥。
LINQ Framework大致分为三大部份,各自因应不同的资料来源,LINQ To Object Framework用来对物件查询,LINQ To XML Framework用于查询XML物件,LINQ To ADO.NET Framework又可细分为三个子集:LINQ To DataSet Framework用来对DataTable、DataRow等物件做查询,LINQ To SQL Framework则用于对资料库的查询,LINQ To Entity Framework则是与ADO.NET Entity Framework整合。在LINQ Framwork之上的,是程式语言编译器所提供的LINQ Expression语法支援,如同前面所提及的,LINQ Framework本身是一组与程式语言无关的Framework,借助于编译器所提供的LINQ Expression支援,让设计师能更轻松的撰写LINQ应用程式。举例来说,在C#中可以用>from xxx in xxx where xxx == xxx<的LINQ Expression语法来取代对LINQ To Object Framework的函式呼叫>xxx.Where(..)<,此处的Where函式是LINQ To Object Framework所提供的,下文会对此有更详细的介绍。基本上,语言编译器有义务对于如LINQ To Object、LINQ To XML、LINQ To ADO.NET提供一致性的LINQ Expression语法规则,这可以让设计师只学习一种语法,就能应用于不同的语言中。 LINQ的出现,代表着程式语言将走向下一个阶段,正如其全名『Language Integrated Query』所表现的意义,程式语言将与查询语言整合,为设计师提供更快速、方便的查询功能,更甚之! LINQ中的LINQ To SQL功能正试图整合各资料库厂商所各自为政的SQL语言,其架构中的LINQ Provider机制,允许设计师为不同的资料库撰写Provider,将LINQ的语法转换成该资料库所能接受的语法
LINQ架构中分成了三大部份,LINQ To Object、LINQ TO ADO.NET、LINQ TO XML,因此本系列文章也分成了三个阶段,在此阶段中,笔者将以LINQ To Object Framework为主轴,为读者们介绍其基本用法,与其它的文章不同,本文同时会尝试讨论LINQ To Object Framework的幕后机制,将LINQ To Object Framework身上所被的简洁外衣去除,让读者们一窥其设计之巧妙之处,首先从一个简单的LINQ To Object Framework程式开始。
程式码中,斜体字部份就是C#所提供的LINQ Expression语法,意思是从list这个字串阵列中,取出一个列举物件(IEnumerable),放到p变数中,读者们应该已发觉到, p变数是以var方式宣告的,var是C# 3.0的新关键字,意指其型态是由右方运算式所指定,本文后面会详述其用法及限制,在此处,请将她视为是由编译器依据右方运算式的传回值所决议的型别。
- private static void TestSimpleLinq() {
- string[] list = new string[] { "1111", "2222", "3333" };
- var p = from o in list select o;
- foreach (var s in p)
- Console.WriteLine(s);
- }
【编辑推荐】