摘要:
本篇我们会讨论与XML文档相关的另外几个重要概念:Documents、Declarations和Namespaces。一个XDocument封装了根元素并且允许我们添加XDeclaration, processing instructions, 文档类型和其他根级类型对象;一个标准的XML文件总是从一个declaration(声明)开始,它的作用是确保文件会被文件读取器正确的读取和理解;就像.NET类型可以有namespaces(命名空间)一样,XML元素和属性也可以有namespaces,用于对XML文档进行更有效的管理。 阅读全文
摘要:
本篇包含两部分内容:X-DOM更新一节中我们会详细讨论LINQ to XML的更新方式,包括Value的更新、子节点和属性的更新、通过Parent节点实现更新;
和Value属性交互一节会详细讨论XElement和XAttribute的Value属性。如果一个元素只有单个XText子节点,那么XElement的Value属性即是对该子节点的快捷方式。对于XAttribute来讲,Value就是指其属性值。X-DOM为XElement和XAttribute的Value属性提供了一致的操作方式。 阅读全文
摘要:
正如我们期望的那样,XNode和XContainer类定义了用于遍历X-DOM tree的方法和属性。但是和传统的DOM不同,这些方法并不返回IList集合,而是返回单个值或者实现了IEnumerable的sequence(这样我们就可以对其创建LINQ查询了)。本篇我们会讲述X-DOM的各种导航方法。 阅读全文
摘要:
.NET Framework提供了数种操作XML数据的API。从Framework 3.5开始,最重要的用来处理XML文档的技术当属LINQ to XML。LINQ to XML由一个轻量级的XML文档对象模型和一组补充查询运算符组成,并且,该文档对象模型是LINQ友好的。多数情况下,它可以完全取代XML技术的前身:符合W3C规则的DOM,如XmlDocument。现在,就让我们一起开始LINQ to XML的学习之旅,看看它是怎样简化XML的查询与操作,提高我们的工作效率的。 阅读全文
摘要:
本篇将是关于LINQ Operators的最后一篇,包括:集合运算符(Set)、Zip操作符、转换方法(Conversion Methods)、生成器方法(Generation Methods)。集合运算符用语对两个sequence进行操作;Zip运算符同步遍历两个sequence(像一个拉链一样),返回的sequence基于在每一个元素对上应用lambda表达式;转换方法用来将实现了IEnumerable的sequence转换到其他类型的集合,或从其他类型的集合转换到sequence;生成器方法/Generation Methods用来创建简单的本地sequence。 阅读全文
摘要:
本篇继续LINQ Operators的介绍,包括元素运算符/Element Operators、集合方法/Aggregation、量词/Quantifiers Methods。元素运算符从一个sequence当中获取单个元素;集合方法对sequence进行统计/汇总并返回当个标量值;量词方法用于判断sequence是否满足特定条件并返回bool值。 阅读全文
摘要:
本篇继续LINQ Operators的介绍,这里要讨论的是LINQ中的排序和分组功能。LINQ的排序操作符有:OrderBy, OrderByDescending, ThenBy, 和ThenByDescending,他们返回input sequence的排序版本。分组操作符GroupBy把一个平展的输入sequence进行分组存放到输出sequence中。 阅读全文
摘要:
Join和GroupJoin通过匹配两个输入sequence来产生单个输出sequence。Join产生平展结果集,而GroupJoin产生层次结果集。Join和GroupJoin提供了Select和SelectMany的替代策略。
Join和GroupJoin的优点是他们对于本地内存集合的执行更加有效,因为他们开始就把内层sequence装载到一个按键排序的查找器,这样就避免了重复的遍历每一个内层元素。他们的缺点则是他们只提供了inner和left out join的功能,而cross joins和不等连接non-equi joins还是只能通过Select/SelectMany来实现。 阅读全文
摘要:
本篇继续LINQ Operators的学习,这里我们讨论的是数据转换的两种方式:Select和SelectMany,看似简单常用的两种运算符,却也大有讲究。我们会在本篇详细介绍他们的使用方式和适用的场景,以及它们对于各种连接(Join)的支持方式。 阅读全文
摘要:
在本系列博客前面的篇章中,已经对LINQ的作用、C# 3.0为LINQ提供的新特性,还有几种典型的LINQ技术:LINQ to Objects、LINQ to SQL、Entity Framework进行了比较详细的介绍,至此,我们应该了解了各种LINQ技术之间的联系和区别。千里之行始于足下,这些基础理论是理解和使用LINQ的关键。但是我们在前面的文章中对于LINQ查询运算符(LINQ Operators)并没有完整的介绍,这就是接下来这几篇博客中所要做的工作。大家可以按顺序依次对各个LINQ Operators进行学习,也可以把他们看成一个reference,作为参考查询之用。 阅读全文