-- LINQ和NHibernate初体验)
研发与数据库打交道的系统的时候最过于繁琐的莫过于没有编程快感的使用ADO.NET对后台数据库进行操作因为所有的数据库连接、读取、操作千篇一律编程成为了体力活。虽然我们可以设计自己的类作为数据库访问的持久层但是每一个类都必须有不相同的SQL语句这样对于设计统一的数据库读写类造成了很大的困难。开发人员在这种情况下必须包办窗体设计、方法设计、数据库读写设计的过程这样加大了开发人员的负担也使得项目的维护和后期开发变得难以进行。2 .NET下的ORM解决方案2.1 LINQ2.1.1 LINQ简介作为微软开发的查询方案LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源 all sources of information 的具有多种用途 general-purpose 的语法查询特性 query facilities 这是比向开发语言和运行时 runtime 添加一些关系数据 relational 特性或者类似 XML 特性 XML-specific 更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ) 。如果觉得上面的解释有点抽象那么可以这样理解LINQ其实就是提供了一套查询功能可以实现任何数据源的查询此处数据源不单指数据库或者XML文件而是任何集合或者实体比如我们接触各种编程语言都需要用到的数组现在不用遍历数组元素来寻找需要的项LINQ可以实现这方面的查询。LINQ查询数组图2.1 LINQ查询数组上面是最简单的LINQ实现对数组的查询泛型类型var在LINQ查询中提供了强大的委托类型支持不管查询集合中项的类型无论是intchar还是string或者类我们只用一个var就可以保存LINQ查询到的结果。程序结果如下图2.2 LINQ查询数组程序结果是不是很方便LINQ的应用远远不这些通过不同的映射方案我们可以实现对数据库LINQ To SQL对XML文件LINQ To XML的访问。2.1.2 LINQ简介表2.1 LINQ的操作符操作符说明聚合Aggregate对序列执行一个自定义方法Average计算数值序列的平均值Count返回序列中的项目数整数LongCount返回序列中的项目数长型Min查找数字序列中的最小数Max查找数字序列中的最大数Sum汇总序列中的数字连接Concat将两个序列连成一个序列转换Cast将序列中的元素转换成指定类型OfType筛选序列中指定类型的元素ToArray从序列返回一个数组ToDictionary从序列返回一个字典ToList从序列返回一个列表ToLookup从序列返回一个查询ToSequence返回一个 IEnumerable 序列元素DefaultIfEmpty为空序列创建默认元素ElementAt返回序列中指定索引的元素ElementAtOrDefault返回序列中指定索引的元素或者如果索引超出范围则返回默认值First返回序列中的第一个元素FirstOrDefault返回序列中的第一个元素或者如果未找到元素则返回默认值Last返回序列中的最后一个元素LastOrDefault返回序列中的最后一个元素或者如果未找到元素则返回默认值Single返回序列中的单个元素SingleOrDefault返回序列中的单个元素或者如果未找到元素则返回默认值相等SequenceEqual比较两个序列看其是否相等生成Empty生成一个空序列Range生成一个指定范围的序列Repeat通过将某个项目重复指定次数来生成一个序列分组GroupBy按指定分组方法对序列中的项目进行分组联接GroupJoin通过归组将两个序列联接在一起Join将两个序列从内部联接起来排序