演讲的前两个部分讲述了LINQ to XML的基础和当前的高级XML特性:
LINQ to XML相关类,如XDocument、XElement、XAttribute、XNamespace、XName 、VB XML Literals 、智能感知支持 、有效的运算符重载 、通过对XElement和XAttribute进行转型操作,可绕过.Value属性对内容进行操作 、可置空类型和空合并运算符 桥接类,可以通过System.Xml API访问LINQ to XML树,演讲的幻灯片可以通过会议的网站下载。
在演讲的第三部分中,Shyam展示了未来LINQ to XML的一些扩展:LINQ to XSD和LINQ to Stored XML。
LINQ to XSD最早是由微软XML团队在2006年11月发布,其中包括一个为2006年5月LINQ的CTP发布的Alpha 0.1预览版:
LINQ to XSD为.NET开发者提供了基于LINQ to XML的类型化XML编程的支持。程序员使用LINQ to XML对一般的XML树进行操作,而LINQ to XSD则被用来对类型化XML树进行操作,这些XML树是一些将特定的XML schema(XSD)类型模式化为.NET XML类型后的实例。为了帮助理解,请思考一下下面的C# 3.0程序片段,它用LINQ to XML查询XML树中所有项目的总数以生成购买订单:
(from item in purchaseOrder.Elements("Item")2007年7月,针对Visual Studio 2008 Beta 1的另一个Alpha 0.2预览版发布,但在VS 2008 Beta2中没有出现LINQ to XSD预览版,这可能是因为该技术的带头人Ralf Lämmel博士离开了微软。OakLeaf Systems的首席咨询师Roger Jennings了解LINQ to XSD的详细历史,他提及此事并要求微软提供相应的升级。
select (double)item.Element("Price") * (int)item.Element("Quantity")
).Sum();
使用LINQ to XSD,这一查询可以以更加简洁和类型安全的方式来实现:
(from item in purchaseOrder.Item
select item.Price * item.Quantity
).Sum();
Ralf Lämmel更新了他的LINQ to XSD实现,在2006年11月为2006年5月LINQ CTP版提供的Alpah 0.1预览版,和为2007年6月5号的Orcas Beta 1中提供的Alpha 0.2预览版中可以进行增强类型化LINQ to XML查询,之后Lämmel博士就返回了德国,在科布伦次大学(University of Koblenz)的计算机科学系担任全职教授。对于VS 2008最终版中的LINQ to XSD更新,负责LINQ to XML的微软XML团队还没有正式表态,希望最终不会因为人员变化导致这个非常有用的LINQ消失。
LINQ to Stored XML(数据库中的XML形式)在SQL Server 2005中提供了多种针对XML数据类型列的查询方式,目标是通过提供“从XML schema到类的映射”和“从LINQ表达式到服务器XQuery表达式的查询转换”来实践“提供增强类型化LINQ体验,胜过XML数据类型列中的数据”的理念,下面的查询示例是在一个将‘Resume’作为一个XML数据类型列的AdventureWorks数据库中进行的:
查询:
var q = from o in _data.JobCandidates
where o.Resume.Skills.Contains("production")
select o.Resume.Name.Name_Last;
输出:
SELECT [Extent1].[Resume].query(
N'declare namespace r="http://.../adventure-works/Resume";
/*[1]/r:Name/r:Name.Last'
).value(N'.', N'nvarchar(max)') AS [C1]
FROM [HumanResources].[JobCandidate] AS [Extent1]
WHERE cast(1 as bit) = ([Extent1].[Resume].query(
N'declare namespace r="http://.../adventure-works/Resume";
contains(/*[1]/r:Skills, "production")'
).value(N'.', N'bit'))
这次演讲是第一个证明LINQ to XSD还在继续发展、LINQ to Stored XML也正在进行中的迹像,但可惜不知道发布日期,甚至连何时能提供预览也都没有提及。